先来说说是什么区别:
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
之后问题随之解决。
网友评论