我收到來自後端的響應時試圖處理錯誤。如果響應成功,我們開始一個新的活動,另一方面,如果響應不成功,我們調用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。你對此有何看法?我們錯過了什麼嗎?