使用OkHttp

Android 2017-09-08

首先在依赖里引入OkHttp库:
compile 'com.squareup.okhttp3:okhttp:3.4.1'

首先回顾官方的HttpURLConnection:

private void sendRequestWithHttpURLConnection() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection=null;
                BufferedReader reader=null;
                try {
                    URL url=new URL("https://www.baidu.com");
                    connection= (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    InputStream in=connection.getInputStream();
                    reader=new BufferedReader(new InputStreamReader(in));
                    StringBuilder response=new StringBuilder();
                    String line;
                    while((line=reader.readLine())!=null){
                        response.append(line);
                    }
                    showResponse(response.toString());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    if(reader!=null){
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        if (connection!=null){
                            connection.disconnect();
                        }
                    }
                }
            }
        }).start();
    }


与OkHttp对比:
首先需要创建一个OkHttpClient的实例,
OkHttpClient client = new OkHttpClient();

接下来如果想要发起一条HTTP请求, 就需要创建一个Request 对象:
Request request = new Request.Builder().build();

上述代码只是创建了一个空的Request 对象, 并没有什么实际作
用, 我们可以在最终的build() 方法之前连缀很多其他方法来丰富这
个Request 对象。 比如可以通过url() 方法来设置目标的网络地址,

    Request request = new Request.Builder()
    .url("http://www.baidu.com")
    .build();

之后调用OkHttpClient的newCall() 方法来创建一个Call 对象, 并调用
它的execute() 方法来发送请求并获取服务器返回的数据, 写法如下:
Response response = client.newCall(request).execute();
其中Response 对象就是服务器返回的数据了, 我们可以使用如下写法
来得到返回的具体内容:
String responseData = response.body().string();

    private void sendRequestWithOkHttp(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client=new OkHttpClient();
                Request request=new Request.Builder()
                        .url("http://www.baidu.com")
                        .build();
                try {
                    Response response=client.newCall(request).execute();
                    String responseData=response.body().string();
                    showResponse(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

主线程中更新Ui:

private void showResponse(final String s) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.d("ssssss",s);
                responseText.setText(s);
            }
        });
    }

本文由 方方無 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide