- 实现解耦是retrofic的精华
传统的http访问
- 构造request
- 创建一个线程池
- 将request放入到线程池中
获取数据后回调给上层
需要自己管理线程切换,需要自己解析读取数据,解析数据成对象,切换回主线程,回调给上层。
retrofic特性
- 可以同步请求
- 可以异步请求
- 适配不同的适配器来处理数据
- 可以选择不同的反序列化工具
retrofit = new Retrofit.Builder()
.baseUrl(URL.SERVICE_URL)
//.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//网络请求适配器
.addConverterFactory(GsonConverterFactory.create())//反序列化工具来解析数据
.client(okHttpClient)
.build();
// 创建网络请求接口的实例(内部可以参考源码,利用了动态代理来生成具体的请求类)
mApi = retrofit.create(APi.class);
//对发送请求进行封装
Call<News> news = mApi.getNews("1", "10");
//发送网络请求(异步)
news.enqueue(new Callback<News>() {
//请求成功时回调
@Override
public void onResponse(Call<News> call, Response<News> response) {
//请求处理,输出结果-response.body().show();
}
@Override
public void onFailure(Call<News> call, Throwable t) {
//请求失败时候的回调
}
});
//发送网络请求(同步)
Response<Reception> response = news.execute();