Okhttp使用总结

添加依赖:compile 'com.squareup.okhttp3:okhttp:3.4.2'

一个简单的使用okhttp进行网络访问请求:

        //创建okhttpClient对象
        OkHttpClient mOkHttpClient = new OkHttpClient();
        //创建一个请求
        Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .build();
        //创建一个Call
        Call call = mOkHttpClient.newCall(request);
        //请求加入调度
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i("TAG",response.body().string());
            }
        });

//或者
try {
        Response response = mOkHttpClient.newCall(request).execute();
        response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 默认的是get请求方式,首先构造一个Request对象,参数最起码有个url,当然你可以通过Request.Builder设置更多的参数比如:header、method等等等等。
  2. 然后通过request的对象去构造得到一个Call对象,类似于将你的请求封装成了任务,既然是任务,就会有execute()和cancel()等方法
  3. 我们希望以异步的方式去执行请求,所以我们调用的是call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。

重要的是onResponse方法:

public void onResponse(Call call, Response response) 
//但是这个方法并不是在UI线程中执行了 所以如果想要更新UI的话还得通过其他的办法
@Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i("TAG",response.body().string());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //更新UI的操作
                    }
                });
            }

回调参数response,如果我们希望获得的结果是string就通过response.body().string()获取;如果我们希望获得返回值是二进制字节数组,则调用response.body().bytes();如果我们想要拿到返回的是inputStream则调用response.body().byteStream();

关于Post的方式
 //创建okhttpClient对象
        OkHttpClient mOkHttpClient = new OkHttpClient();
        //创建一个请求的内容
        RequestBody body  =new MultipartBody.Builder().addFormDataPart("obj_id","23")
                .addFormDataPart("obj_type","1")
                .addFormDataPart("page","2")
                .build();
        //创建一个请求
        Request request = new Request.Builder()
                .url("http://47.90.16.112/evidencebased/qtuktuk/common/get_comments")
                .post(body)
                .build();

        //创建一个Call
        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i("TAG","error");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i("TAG",response.body().string());
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值