找到属于自己的RxJava+Retrofit2网络请求
来源:互联网 发布:利达主机编程软件 编辑:程序博客网 时间:2024/05/17 07:49
现在网络上面铺天盖地都是RxJava+Retrofit2的博客,还有好多大神不断地造轮子。然后在前段时间,由于项目的空档期,我就对自己现在负责的项目尝试了一下这RxJava+Retrofit2的写法,对于我来说,首先是大量地看各位大神的博客,从中不断吸取精华,在结合自己公司的后台完成的一套属于自己项目的一套网络请求。下面我只针对我的项目情况来描述我的理解。
1.Retrofit介绍
2.Gradle配置
3.简单使用Retrofit2+RxJava
4.自定义JSON解析、错误请求处理、拦截器、降低代码冗余。
- Retrofit介绍
Retrofit是SQUARE美国一家移动支付公司最近新发布的在Android平台上http访问的开源项目,Retrofit与okhttp共同出自于Square公司,我们在HttpClient被弃用后,在HttpURLConnection使用的期间,大家想必会发现okHttp的网络请求开源项目,然后在网络拼命搜okHttp的二次封装,然而retrofit对okhttp做了一层封装,把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了。
- Gradle配置
首先我们在Gradle文件中进行配置
然而对于RxJava和Retrofit的版本差异我就不详细描述,有兴趣的同学可以逐一去学习。
简单使用Retrofit2+RxJava
- 创建Retrofit2请求工具类
Retrofit retrofit = new Retrofit.Builder() .baseUrl("url") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build();
2. 定义请求API
@FormUrlEncoded @POST(URLs.Login) Observable<LoginBean> login(@FieldMap() Map<String, String> maps);
3. 简单使用
RetrofitManage.getInstance().getHttpServiceConnection().login(maps) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<LoginBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(LoginBean loginBean) { } });
上面的是最简单的Retrofit2+RxJava的用法,对于还处于认知阶段的同学可以参考一下,但是对于已经有一定了解的同学,上面说的可能一点用处都没有,下面我们才是本篇的重点。在Retrofit2+RxJava使用过程中,我们结合项目,其实会遇到很多不同的问题,我们应该如何再次优化、再次封装。
如何适应不同的项目不同业务
- 代码过多重复
重复的RxJava处理,我们可以封装一个方法统一使用RxJava来处理。
另外大家都可以看到我们每一次的请求,你需要多次重复的写回调处理,我们需要再次优化。
最终效果
我们不用每一次的请求去写大量重复的代码,这样给人一种较为整洁的感觉。
- 我的后台返回数据各种奇葩、原始数据嵌套多层、某情况需前端特殊处理返回数据等等(过多不吐槽),我们不能顺利使用GsonConverterFactory来转化我们需要的JavaBean,于是我们定义一个适用的JsonConverterFactory。
RetrofitManage为:
JsonConverterFactory为:
JsonResponseBodyConverter为:
这样我们可以将我们请求到的数据流转成JSONObject对象,然后再根据自己需要解析数据组装JavaBean。
- 如何处理错误请求和异常数据
在上面的JSON截取处理中,大家可以看到我对非正常返回(小于0)的情况会抛出一个ResultException的自定义异常,然后转到Subscriber的onError中处理,还有我们在请求数据,会遇到各种错误的网络请求结果,我们可以在封装的ProgressSubscriber类中统一来处理。
ResultException类为:
ProgressSubscriber中onError()统一处理错误结果
- 拦截器
对于我们的请求,okHttp还有很多的特点,例如请求拦截器header,动态注入cookie,加入https请求信任等等处理。这里我来简单说一下拦截器。
我们是在初始化RetrofitManage处理OkHttpClient:
总结:
上述就是我在使用RxJava+Retrofit2的时候遇到的问题,我根据自身需要来封装网络请求,大家在网上各种各样的博客中都会找到适合自己的一种方式,但是我们没有必要如何完美封装如何完美使用这那框架的,第三方的库会帮我们封装底层的一些代码,避免我们做重复多余易出错的事情,让我们专注于业务逻辑,所以学习任何一个第三方库都将是简单的,不应该复杂不该复杂的地方。
源码将会在下篇的RxJava+Retrofit2+MVP博客一起上传。谢谢大家。
- 找到属于自己的RxJava+Retrofit2网络请求
- 打造属于自己的网络请求框架(OKHttp+Retrofit+RxJava)
- RxJava+retrofit2实现网络请求
- RxJava+Retrofit2+MVP实现网络请求
- 网络请求篇--Retrofit2.0+RxJava+OkHttp
- 找到属于自己的路
- 自己对MVP+Retrofit2+RxJava的理解
- Android基于Retrofit2.0+RxJava的结合使用,让你的网络请求更简单
- RxJava Retrofit2 网络请求,返回数据格式统一的数据报文处理方法
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- RxJava Retrofit2 网络请求,返回数据格式统一的数据报文处理方法
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android中MVP模式的内存泄漏解决及Retrofit2、RxJava中断网络请求(二)
- Retrofit2 + RxJava 请求网络图片 并设置到ImageView上
- Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- 如何找到属于自己的兴趣?
- iOS图片设置圆角性能问题
- spring中@param和mybatis中@param使用区别
- 几种常见的排序方法。
- JS 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
- Android Parcelable和Serializable的区别
- 找到属于自己的RxJava+Retrofit2网络请求
- Java并发编程之Java内存模型
- Web前端优化最佳实践及工具集锦
- OC 基本类的扩展 (全而强大)
- pyspark 如何删除hdfs文件
- LeetCode OJ-24-Swap Nodes in Pairs
- SpringMVC+ajax+json
- JAVA学习总结之IO/NIO概述
- Idea 2016.1.3注册码 (http://idea.lanyus.com/)