Rxjava +Retrofit 你需要掌握的几个技巧.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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;

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档