美文网首页AndroidAndroid-RxJava
Rxjava中Observer和Subscriber的一点小区别

Rxjava中Observer和Subscriber的一点小区别

作者: 12313凯皇 | 来源:发表于2019-06-24 15:22 被阅读10次

    先来说说是什么区别:
    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的实例

    相关文章

      网友评论

        本文标题:Rxjava中Observer和Subscriber的一点小区别

        本文链接:https://www.haomeiwen.com/subject/sthoqctx.html