0
我是RxJava的新手,仍然在探索它的奇蹟。rxjava - 如何處理地圖內的異常()
我改造Response
對象爲使用map()
運營商LoginSession
對象,但可以有轉變過程中引發的IOException
。以下是示例代碼。
可觀察
public Observable<LoginSession> login(@NonNull String username, @NonNull String password) {
return Observable.create(new Observable.OnSubscribe<Response>() {
@Override
public void call(Subscriber<? super Response> subscriber) {
loginInternal(username, password, subscriber);
}
}).map(response -> {
try {
LoginSession session = Utils.methodThatCanReturnAnIoException(response.body().byteStream(), LoginSession.class);
return session;
} catch(IOException e){
return null; // what should I do here ????
}
}).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread());
}
用戶
login("username", "password").subscribe(loginSession -> {
//i hate checking for null here. there should be a better way...
if(loginSession != null){
Log.d("MY_SESSION", "Login session successful.");
} else {
Log.d("MY_SESSION", "Login Session is null unfortunately.");
}
});
什麼是處理這種情況的最好方法是什麼?除了檢查subscribe()
中的空值,我肯定不是最好的做法。
過濾掉空值。 –
至於另一個,將地圖更改爲平面地圖,在Observable.create()或Observable.defer()中進行操作並處理那裏的錯誤。 –
但我希望訂閱者知道發生了錯誤。 filter()用戶永遠不會知道轉換失敗。 –