Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

android之OkHttp简单使用

$
0
0

okHttp 的简单使用

引入Gradle依赖:compile 'com.squareup.okhttp3:okhttp:3.4.1'

HTTP GET请求

MainActivity代码如下:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * http-get请求
     *绑定按钮的事件
     * @param view
     */
    public void httpGet(View view) {

        new Thread() {
            @Override
            public void run() {
                super.run();
                String url = "http://www.baidu.com";
                OkHttpClient client = new OkHttpClient();//创建okhttp实例
                Request request = new Request.Builder()
                        .url(url).build();
                Call call = client.newCall(request);
                try {
                    Response response = call.execute();
                    if (response.isSuccessful()) {
                        Log.i(TAG, "httpGet: " + response.body().string());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

运行结果:
这里写图片描述

Response response = call.execute();这个是异步方式的,所以我开启了个子线程来执行,
否则会崩掉。。也可以不开启线程,那就可以这样做:

修改后MainActivity代码如下:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * get请求
     *
     * @param view
     */
    public void httpGet(View view) {
        String url = "http://www.baidu.com";
                OkHttpClient client = new OkHttpClient();//创建okhttp实例
                Request request = new Request.Builder()
                        .url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            //请求失败时调用
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, "onFailure: " + e);
            }
            //请求成功时调用
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i(TAG, "onResponse: " + "ss");
                if (response.isSuccessful()) {
                    Log.i(TAG, "onResponse: " + response.body().string());
                }
            }
        });

    }

}

运行结果是一样的,其实这个也是异步操作的。、

HTTP POST请求

自己搭个服务器吧。我用的是tomcat,访问自己的服务器。老是访问别人的服务器多没意思。哈哈。。

在eclipse先建个web工程,再创建个LoginServlet代码如下:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */

public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("GET请求成功");
        response.getWriter().append("GET请求成功");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 防止乱码
         */
        response.setContentType("text/html;charset=utf-8");
        response. setCharacterEncoding("UTF-8");
        request. setCharacterEncoding("UTF-8");

        System.out.println("Post请求成功");
        String name=request.getParameter("name");

        System.out.println(name);
        response.getWriter().append("Post请求成功");
    }
}

然后把这个web项目部署到tomcat中就好了,这样我们的简单的服务器就搭建好了。

修改后MainActivity代码如下:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * get请求
     *
     * @param view
     */
    public void httpGet(View view) {
        //换成自己的ip就行
        String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
                OkHttpClient client = new OkHttpClient();//创建okhttp实例
                Request request = new Request.Builder()
                        .url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            //请求失败时调用
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, "onFailure: " + e);
            }
            //请求成功时调用
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i(TAG, "onResponse: " + "ss");
                if (response.isSuccessful()) {
                    Log.i(TAG, "onResponse: " + response.body().string());
                }
            }
        });

    }

    /**
     * post请求
     * @param view
     */
    public void httpPost(View view){
        //换成自己的ip就行
        String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
        OkHttpClient client = new OkHttpClient();//创建okhttp实例
        FormBody body=new FormBody.Builder()
                .add("name","张三")
                .add("age","23")
                .build();
        Request request=new Request.Builder().post(body).url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            //请求失败时调用
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, "onFailure: " + e);
            }
            //请求成功时调用
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    Log.i(TAG, "onResponse: " + response.body().string());
                }
            }
        });
    }
}

运行结果:
这里写图片描述

好了,一个简单的post请求演示完了,只是提交了个键值对到服务器中,接下来演示提交json数据到服务器中

修改后MainActivity代码如下:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * get请求
     *
     * @param view
     */
    public void httpGet(View view) {
        //换成自己的ip就行
        String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
                OkHttpClient client = new OkHttpClient();//创建okhttp实例
                Request request = new Request.Builder()
                        .url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            //请求失败时调用
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, "onFailure: " + e);
            }
            //请求成功时调用
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i(TAG, "onResponse: " + "ss");
                if (response.isSuccessful()) {
                    Log.i(TAG, "onResponse: " + response.body().string());
                }
            }
        });

    }

    /**
     * post请求
     * @param view
     */
    public void httpPost(View view){
        //换成自己的ip就行
        String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
        OkHttpClient client = new OkHttpClient();//创建okhttp实例
        FormBody body=new FormBody.Builder()
                .add("name","张三")
                .add("age","23")
                .build();
        Request request=new Request.Builder().post(body).url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            //请求失败时调用
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, "onFailure: " + e);
            }
            //请求成功时调用
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    Log.i(TAG, "onResponse: " + response.body().string());
                }
            }
        });
    }

    /**
     * post请求 提交数据到服务器
     * @param view
     */
    public void httpPostJSON(View view){
        String json="{\n" +
                "    \"name\": \"张三 \"\"age\": \"23 \"\n" +
                "}";
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        //换成自己的ip就行
        String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
        OkHttpClient client = new OkHttpClient();//创建okhttp实例
        RequestBody body=RequestBody.create(JSON,json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            //请求失败时调用
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i(TAG, "onFailure: " + e);
            }
            //请求成功时调用
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    Log.i(TAG, "onResponse: " + response.body().string());
                }
            }
        });

    }
}

web工程下LoginServlet 类doPost方法
修改后如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 防止乱码
         */
        response.setContentType("text/html;charset=utf-8");
        response. setCharacterEncoding("UTF-8");
        request. setCharacterEncoding("UTF-8");
        /**
         * 把请求的json数据读取出来。
         */

        InputStream is=request.getInputStream();
        BufferedReader reader=new BufferedReader(new InputStreamReader(is, "utf-8"));
        String line=null;
        StringBuffer sb=new StringBuffer();
        while((line=reader.readLine())!=null){
            sb.append(line);
        }
        System.out.println(sb.toString());
        response.getWriter().append("Post请求成功");
    }

运行效果:

这里写图片描述

总结:

终于写完了,我是名初学者,有不对的地方请指正。

作者:song_shui_lin 发表于2016/10/26 18:17:18 原文链接
阅读:71 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>