android - 在rxjava中map內(nèi)進(jìn)行錯(cuò)誤處理應(yīng)該怎么寫(xiě)?
問(wèn)題描述
我的需求是這樣的:
第一個(gè)請(qǐng)求是login,拿到token
第二個(gè)請(qǐng)求是用token作為參數(shù)去拿到用戶信息 目前的寫(xiě)法是這樣的:
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(); }});
目前的問(wèn)題:在login和userinfo兩個(gè)接口的地方?jīng)]有做錯(cuò)誤處理。 在一些文章中看到可以在map里面做錯(cuò)誤處理,但是我現(xiàn)在的寫(xiě)法只有后一個(gè)(userinfo)可以處理。 問(wèn)題:
map中判斷失敗,進(jìn)行處理以后后面的subscribe方法還會(huì)執(zhí)行么?里面的onError,onCompleted回調(diào)會(huì)執(zhí)行么?
如果使用了flapmap,第一個(gè)接口(login)的錯(cuò)誤處理怎么辦?
問(wèn)題解答
回答1:代碼正常執(zhí)行完會(huì)進(jìn)入onCompleted,出錯(cuò)了會(huì)進(jìn)入onError;
可以在 map 里 try-catch處理錯(cuò)誤;也可以在 onError 做統(tǒng)一處理。
.filter(userBean -> { // 請(qǐng)求失敗 if (userBean.getCode() == 999) {Toast.makeText(MyActivity.this, userBean.getMsg(), Toast.LENGTH_SHORT).show();return false; } return true;}).subscribe(userBean -> { // 請(qǐng)求成功 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. 為什么我ping不通我的docker容器呢???2. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?3. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問(wèn)?4. 百度地圖api - Android 百度地圖 集成了定位,導(dǎo)航 相互的jar包有沖突?5. vim - docker中新的ubuntu12.04鏡像,運(yùn)行vi提示,找不到命名.6. angular.js - angular內(nèi)容過(guò)長(zhǎng)展開(kāi)收起效果7. debian - docker依賴(lài)的aufs-tools源碼哪里可以找到啊?8. golang - 用IDE看docker源碼時(shí)的小問(wèn)題9. html5和Flash對(duì)抗是什么情況?10. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?

網(wǎng)公網(wǎng)安備