添加依赖: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();
}
- 默认的是get请求方式,首先构造一个Request对象,参数最起码有个url,当然你可以通过Request.Builder设置更多的参数比如:header、method等等等等。
- 然后通过request的对象去构造得到一个Call对象,类似于将你的请求封装成了任务,既然是任务,就会有execute()和cancel()等方法
- 我们希望以异步的方式去执行请求,所以我们调用的是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());
}
});