我收到来自后端的响应时试图处理错误。如果响应成功,我们开始一个新的活动,另一方面,如果响应不成功,我们调用onError方法。Rx用户内的开始活动
我们感觉我们没有正确处理生命周期,因为我们打开一个新的活动,我们的订阅取消订阅,所以我们不会正确地解除对话。我们是否应该在用户内部类中存储变量以在onComplete中请求该变量,并在该方法中启动新的活动?或者这个aproximation足够好?
Subscriber<BackendResponse> subscriber = new Subscriber<BackendResponse>() {
@Override
public void onCompleted() {
progressDialog.dismiss();
}
@Override
public void onError(Throwable exception) {
progressDialog.dismiss();
SnackbarNotification.show(coordinatorLayout, "Error");
}
@Override
public void onNext(BackendResponse backendResponse) {
if (backendResponse.getSuccess()){
startActivity(new Intent(LoginActivity.this, HomeActivity.class));
} else {
onError(new Exception("Launch onError"));
}
}
};
此外,我们是否正确处理onError流?我们知道从onNext调用onError会导致调用Error并在调用onComplete之后。我们是否应该在onError方法上取消订阅订阅?
我们找到了用户的包装:
public abstract class DefaultSubscriber<T> extends Subscriber<T> {
protected T result;
@Override
public void onCompleted() {
onSuccess(result);
}
@Override
public void onError(Throwable e) {
CustomLog.e("onError", e.getMessage());
onFailure(e);
}
@Override
public void onNext(T t) {
result = t;
}
protected abstract void onSuccess(T t);
protected abstract void onFailure(Throwable exception);
}
这样做,我们通过存储在onNext一个成员变量提供的结果。一旦流完成(只有一次迭代),我们在onCompleted内部调用onSuccess(result)。另一方面,我们在onFailure方法中处理onError。你对此有何看法?我们错过了什么吗?