本小节主要讲解okhttp基本用法
第一步 创建client
通常情况下,在我们的应用中OkHttpClient采用单例模式创建,这是因为每一个okhttp client都拥有自己的connection pool(连接池 )和thread pool(线程池),通过对他们的复用避免资源浪费从而减少内存开支。
创建client有两种方式:
- 方式一:使用其构造方法
// The singleton HTTP client.
public final OkHttpClient client = new OkHttpClient();
- 方式二:使用OkHttpClient的静态内部类Builder
// The singleton HTTP client.
public final OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor())
.cache(new Cache(cacheDir, cacheSize))
.build();
第二步 创建请求对象Request
- Get请求:
Request request = new Request.Builder()
.url(url)
.build();
- Post请求:
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
第三步 对Request请求对象封装成Call对象
Call call = client.newCall(request);
第四步 发送请求
Okhttp支持同步和异步对请求
- 同步请求
try {
Response response = call.execute();
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
- 异步请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//注:该回调为子线程,不能之间进行UI更新操作,需要切换到UI线程
System.out.println("Fail");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//注:该回调为子线程,不能之间进行UI更新操作,需要切换到UI线程
System.out.println(response.body().string());
}
});
小结
以上就是okhttp中基本使用流程,这里需要提醒大家的是,异步请求Callback方法并不是在UI线程。下一节,我们将正式开始源码的学习。