发送网络请求
APP的联网能力现在必不可少, 所以选择一个适合的网络框架至关重要. 我主要以以下几个方面考虑:
使用简单简洁
方便的自定义, 如加请求头
方便的取消请求
能方便的与GSON等序列化库结合
完善的Log信息打印
Retrofit2
最后选择了Retrofit2, 具体介绍可以参考 用 Retrofit 2 简化 HTTP 请求. 基本用法可以参考 官方网站.
这里就不再赘述Retrofit2的优缺点, 主要谈谈引入Retrofit2后需要做的一些准备工作:
将Retrofit2的API应用至Model层
与GSON结合
自定义Log输出
处理一些通用的异常
取消请求
预处理请求结果
1. 将Retrofit2的API应用至Model层
Retrofit的特色是使用注解与接口来描述网络请求, 在多数情况下能很好的与Model层的接口结合起来, 而无需重写实现类.
然后通过api对象去调用getTypes或getTopProducts接口. 通过这种方式我们就能直接将描述请求的接口应当做一个Model来使用. 但是每次使用都去要生成一个Retrofit.Builder, 然后做一些配置, 额外增加了重复代码, 因此我们可以写一个工具类, 来专门生成Retrofit接口实例
在这里我使用了两个类:
RetrofitFactory 持有一个Retrofit单例, 专门用于配置Retrofit, 比如baseUrl, converter, adapter之类.
ApiFactory 单例, 持有一个HashMap对象, 用于缓存Retrofit生成的接口实例, 而无需重复生成.
在使用前还需要调用
2. 与GSON结合
Retrofit2可以很方便的通过Converter与GSON结合, 在RetrofitFactory类中已经做了绑定, 无需再处理.
我们只需要在定义接口的时候给定结果类型, Retrofit内部会调用GSON解析JSON数据, 并转换成相应的实体类.
3. 自定义Log输出
为何要有Log输出? 有了网络请求的Log我们就能很方便的追踪问题, 看是服务器返回的数据有误, 还是我们解析有误. Retrofit2内部使用的是okhttp3, 因此可以考虑使用okhttp的Interceptor来打印Log输出:
然后在RetrofitFactory中加入:
以下是Log格式:
接下来的几部分都建议在有一定RxJava基础的情况下阅读. 参考RxJava.
Last updated
Was this helpful?