android - 在rxjava中map內(nèi)進行錯誤處理應(yīng)該怎么寫?
問題描述
我的需求是這樣的:
第一個請求是login,拿到token
第二個請求是用token作為參數(shù)去拿到用戶信息 目前的寫法是這樣的:
subscription = APIHelper.getAPIS().login(mUsername, mPwd).flatMap(new Func1<LoginSuccess, Observable<User>>() { @Override public Observable<User> call(LoginSuccess loginSuccess) {//存一下token 略return APIHelper.getAPIS().getUserInfo(loginSuccess.getId()); }}).map(new Func1<User, User.UserBean>() { @Override public User.UserBean call(User user) {return user.getUser(); }}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).doOnSubscribe(new Action0() { @Override public void call() {showLoading(R.string.login_message); }}).subscribe(new Subscriber<User.UserBean>() { //onError,onCompleted,略 @Override public void onNext(User.UserBean userBean) { //存一下用戶信息,提示登錄成功 略startActivity(new Intent(LoginActivity.this, MainActivity.class));finish(); }});
目前的問題:在login和userinfo兩個接口的地方?jīng)]有做錯誤處理。 在一些文章中看到可以在map里面做錯誤處理,但是我現(xiàn)在的寫法只有后一個(userinfo)可以處理。 問題:
map中判斷失敗,進行處理以后后面的subscribe方法還會執(zhí)行么?里面的onError,onCompleted回調(diào)會執(zhí)行么?
如果使用了flapmap,第一個接口(login)的錯誤處理怎么辦?
問題解答
回答1:代碼正常執(zhí)行完會進入onCompleted,出錯了會進入onError;
可以在 map 里 try-catch處理錯誤;也可以在 onError 做統(tǒng)一處理。
.filter(userBean -> { // 請求失敗 if (userBean.getCode() == 999) {Toast.makeText(MyActivity.this, userBean.getMsg(), Toast.LENGTH_SHORT).show();return false; } return true;}).subscribe(userBean -> { // 請求成功 startActivity(new Intent(LoginActivity.this, MainActivity.class)); finish();}, throwable -> { // 程序異常 Log.e('TAG', 'Error:' + throwable.getMessage()); // Toast.makeText(context, '登錄失敗', Toast.LENGTH_SHORT).show();});
回答2:
在onError中處理就可以了。
相關(guān)文章:
1. macOS Sierra 10.12 安裝mysql 5.7.1出現(xiàn)錯誤2. mysql - 拖拽重排序后怎么插入數(shù)據(jù)庫?3. android - 安卓做前端,PHP做后臺服務(wù)器 有什么需要注意的?4. javascript - 按鈕鏈接到另一個網(wǎng)址 怎么通過百度統(tǒng)計計算按鈕的點擊數(shù)量5. mysql 獲取時間函數(shù)unix_timestamp 問題?6. mysql - 僅僅只是把單引號與反斜杠轉(zhuǎn)義不用prepare statement能否避免sql注入?7. php - 生產(chǎn)環(huán)境下,給MySQL添加索引,修改表結(jié)構(gòu)操作,如何才能讓線上業(yè)務(wù)不受影響?8. mysql主主同步,從庫不同步應(yīng)該怎么解決?9. mysql在限制條件下篩選某列數(shù)據(jù)相同的值10. 新入手layuiadmin,部署到tp中。想用php自已寫一個后臺管理系統(tǒng)。
