- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RxjavaRetrofit你需要掌握的几个技巧
Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题
取消订阅
一般我们在视图消亡后,无需RxJava再执行,可以直接取消订阅
if (!subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
observable.unsubscribeOn(Schedulers.io());
可用在activity的 onDestroy(), Fragment的 onDestroyView()中调用
还有种场景是借助rxJava请求网络数据,需要网络返回后保存数据并更新UI,这种情况视图已经消亡了必定会导致rxJava出错,导致App闪退,这种我们可以判断前的activity/view是否为空,并是否已showing,如果
两者都不存在,即可无须更新UI。只处理保存数据即可。
订阅问题
需要UI绘制后再进行订阅的场景,防止阻塞UI,我们需要延迟订阅执行。
立即订阅;
observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action);
延迟订阅
observable.delay(2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action);
基础ApiService
通常我们写接口会有以下定义,增加一个api就必须写一个方法
public interface MyApi {
@GET(app.php)
ObservableSouguBean getSougu(@Query(name) String name);
@GET(/getWeather)
ObservableResponseBody getWeather(@QueryMap MapString, String maps);
}
很多时候每新增一个接口就要写一个api,是不是有很好的方法代替这种情况。
@GET()
T ObservableResponseBody get(
@Url String url,
@QueryMap MapString, T maps);
我们可以定义一个通用的getApi,将url动态传入,返回Modle定义为ResponseBody, 并将实际参数定义为泛型,不管是更改url,还是服务端返回类型,包括参数个数都可以完美适配,这种方式技术不到位的千万别用,因为Retrofit明确说明接口必须要给定明确类型,悠着点哈!
上层进行通用组装时就可以这样子:
public T T get(String url, MapString, T maps, BaseSubscriberResponseBody subscriber) {
return (T) apiManager.get(url, maps)
.compose(schedulersTransformer)
.compose(handleErrTransformer())
.subscribe(subscriber);
}
看不懂?看不懂不算奇怪,源码可以去文章末尾下载研究,这里只是列举了一下。这种方式很适合从HttpClent迁移到Retrofit带来接口适配问题,一用一个准啊…
基础Subscriber
很多时候我们需要借用RxJava开启多个observable去读取网络,这是我们对不同Subscriber处理起来比较麻烦,因此统一对Subscriber对网络返回进行处理和, 有无网络做判断,甚至可以根据需求显示加载进度等
构建抽象的BaseSubscribe类,只处理start()和onCompleted() ,上层处理时只处理onError()和onNext()
/**
* BaseSubscriber
* Created by Tamic on 2016-7-15.
*/
public abstract class BaseSubscriberT extends SubscriberT {
private BaseActivity context;
您可能关注的文档
- PS制作背景震撼的杂志封面照片效果.doc
- 粤教版3-2教案 第2章 第6节 变压器.ppt
- PS合成一个怪诞抽象的骷髅头场景.docx
- project_2007图文教程(中).doc
- PY=红楼梦谐音.ppt
- PS钢笔工具电子教案.doc
- 粤教版物理必修一3.2 研究摩擦力——滑动摩擦力 课件 (共23张PPT).ppt
- Q-ZXSL-CAD-001 职员日常行为规范.doc
- 粘弹体防腐以及带锈防腐涂料.docx
- Q-W-005 质量意识培训资料.ppt
- 2025年山东省潍坊市单招(语文)测试题库及答案1套.docx
- 2025年山东信息职业技术学院单招(语文)测试题库及参考答案.docx
- 2025年山东省枣庄市单招语文测试模拟题库含答案.docx
- 2025年山东省德州市选调生考试(行政职业能力测验)综合能力题库及参考答案.docx
- 2025年山西省忻州市单招(语文)测试模拟题库审定版.docx
- 2025年山东省滨州地区单招(语文)测试题库附答案.docx
- 2025年山东省淄博市单招语文测试模拟题库及答案一套.docx
- 2025年山西林业职业技术学院单招(语文)测试题库精编.docx
- 2025年山西省太原市行政职业能力测验题库及参考答案1套.docx
- 2025年山东省枣庄市单招(语文)测试题库汇编.docx
最近下载
- 储能电站项目可行性研究报告.docx
- 2024重庆公共运输职业学院招聘7人笔试备考题库及答案解析.docx VIP
- 华为IPD流程管理体系L1-L5最佳实践及落地实施.pptx VIP
- 铁路内燃机车司机高级技师理论题库(含答案).docx VIP
- 2026届高三语文开学第一课.pptx VIP
- 最新:脑卒中后吞咽障碍患者进食护理——2023中华护理学会团体标准课件.pptx VIP
- 2025重庆公共运输职业学院招聘13人笔试备考试题及答案解析.docx VIP
- 动词过去式不规则变化.doc VIP
- “十八项医疗质量安全核心制度”知识竞赛.docx VIP
- 2024重庆公共运输职业学院招聘1人笔试备考试题及答案解析.docx VIP
文档评论(0)