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方法而已。然后在实际测试的时候发现第一次故意登录失败之后,然后再输入正确的账号密码登录之后就没有网络请求了,找了半天都没发现错在哪,最后才发现是Subscriber的onCompleted后自动取消了订阅,所以第二次登录就不会有请求,改成Observer之后问题随之解决。