Retrofit扫盲
2019-01-17 本文已影响8人
初心一点
Retrofit是什么
- 官方解释:A type-safe HTTP client for Android and Java。说人话就是网络请求的一个封装库。
- 竟然你搜到了这篇文章,那说明至少你大概知道他是干撒的了,就类似google开发的volley库。
Retrofit优势
- 与市面上那么多网络请求库相比,它的优势是使用简单,越用越觉得好用(大家都这么说;)),谁用谁知道:)
Retrofit怎么用
- (接下来说下步骤,先不用全都懂,知道怎么用了,在去分析不懂的知识点)
- 第一步当然是导库,在app/build.gradle文件中
// 这个不必说
api 'com.squareup.retrofit2:retrofit:2.2.0'
// 这个是Retrofit底层需要用的okhttp
api 'com.squareup.okhttp3:okhttp:3.3.1'
// 这个是一种数据转化器,有多种可选
api 'com.squareup.retrofit2:converter-gson:2.1.0'
- 创建接口类(来的有点直接,先装不懂哈)
// 正式项目中,就是一个个接口调用方法
// 有么有注意到这个对象:ResponseBody,一般开发中,我们需要将服务端返回的数据转化成实体对象,哪这里就直接替换为我们定义好的对象即可
// 如果不需要转换Json数据,可以直接返回ResponseBody
// 若需要转换,例如:Call<GsonBean> get***;这样的话,需要添加Gson转换器处理json转换成对象的操作
public interface ApiStores {
@GET("toutiao/index?")
Call<ResponseBody> getDemoNews(@QueryMap Map<String, String> params);
/**
* @param params Get请求,带多个参数的接口
* @return
*/
@GET("toutiao/index?")
Call<NewsBack> getNews(@QueryMap Map<String, String> params);
/**
* @param type Get请求,带一个参数的接口,当然这个跟上一个方法是一样效果,我写在这里是为了便于初学者明白一个参数写法
* @return
*/
@GET("toutiao/index?key=93ed89ccb2c409d1edad583eac67733c")
Call<NewsBack> getNews(@Query("type") String type);
}
- 定义好第二步的接口后,接下来来看如何调用
Retrofit retrofit = new Retrofit.Builder()
// Base URL: 总是以/结尾
// 这里以聚合数据服务来举例
.baseUrl("http://v.juhe.cn/")
// 这里添加json转对象的转换器
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiStores apiStores = retrofit.create(ApiStores.class);
// 添加参数
HashMap<String, String> params = new HashMap<>();
params.put("type", "top");
params.put("key", "93ed89ccb2c409d1edad583eac67733c");
Call<NewsBack> call = apiStores.getNews(params);
// 开启异步请求,注意还有同步请求的功能提供
call.enqueue(new Callback<NewsBack>() {
@Override
public void onResponse(Call<NewsBack> call, retrofit2.Response<NewsBack> response) {
NewsBack back = response.body();
// 这段代码可忽略,实际情况回调进行数据处理刷新UI即可
if (iCallBackListener != null) {
iCallBackListener.callBack(back);
}
}
@Override
public void onFailure(Call<NewsBack> call, Throwable t) {
}
});
- 其实走完上面3步,程序员拿走主意应该算是告一段落,基本上网络数据算是走完流程
其实Retrofit的好用远远不止使用简单这一层。可以衍生的点
- 5.1 结合Rxjava让网络请求更优雅
- 5.2 可以选最有转化器,例如:Jackson、Protobuf等,让网络请求效率更高
- 5.3 添加各种拦截器,让网络请求更顺畅,交互更人性化
等等
参考链接