AndroidAndroid-RxJava

Rxjava中Observer和Subscriber的一点小区别

2019-06-24  本文已影响10人  12313凯皇

先来说说是什么区别:
Subscriber这种订阅方式在第二次请求数据时就不会执行了,原因就是onCompleted后自动取消了订阅Observer则不出现此问题。

举个今天碰到的例子:

RetrofitUtil.getInstance().getService(UserService.class)
  .loginByEmail(email, password)
  .compose(RxUtil.defaultSchedulers())
  .subscribe(mLoginObserver);

//mLoginObserver
private GlobalSubscriber<LoginMsg> mLoginSubscriber = new GlobalSubscriber<LoginMsg>() {
    @Override
    public void onNext(LoginMsg msg) {
        LogUtil.d("mLoginObserver.onNext msg=" + msg);
        if (msg.isStatusCorrect()) {
            User user = msg.getUser();
            if (user != null) {
                mInterface.onLoginSuccess(user);
            } else {
                mInterface.onLoginFailure("user == null");
            }
        } else {
            mInterface.onLoginFailure(msg.getInfo());
        }
    }
};

其中GlobalSubscriber就是一个继承了Subscriber的一个类,仅为了这里只用重写一个onNext方法而已。然后在实际测试的时候发现第一次故意登录失败之后,然后再输入正确的账号密码登录之后就没有网络请求了,找了半天都没发现错在哪,最后才发现是SubscriberonCompleted后自动取消了订阅,所以第二次登录就不会有请求,改成Observer之后问题随之解决。

参考文章RxJava不要重复使用(reuse)Subscriber的实例

上一篇 下一篇

猜你喜欢

热点阅读