亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

歡迎使用CSDN-markdown編輯器

2019-11-09 13:56:38
字體:
來源:轉載
供稿:網友

前情提示: 本文只是一個例子,不做過多講解,入門知識推薦參考 仍物線大神講解的Rxjava,如何優雅的處理服務器異常,本文沒有對Rxjava進行任何封裝,也沒有使用retrolambda,因為對于初學者來說,看起來費(不)勁(會),而且也沒必要。 另外你可以直接看總結,當然如果你只想了解如何處理異常。

正文 今天要寫的例子是模擬 一個實際的登錄請求。 1. 用戶登錄 2. 根據用戶登錄的返回結果(Status code),判斷是否繼續執行 查詢用戶

開始 1. 首先定義Services接口 public interface IUserServices {

@POST("user/login")@FormUrlEncodedObservable<ResponseBody> login(@Field("acount")String acount, @Field("passWord") String password);@GET("user/{userid}")Observable<JsonResponse<User>> getUserById(@Path("userid")String userid);

}

配置我們的OkHttpClientOkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new LogingInterceptor()) .retryOnConnectionFailure(true) .addInterceptor(responselog) .addNetworkInterceptor(new TokenInterceptor()) .build();配置Retrofit mRetrofit = new Retrofit.Builder() .baseUrl(ConstandUtils.SERVICE_BASEURL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .client(client) .build();自定義返回對象public class JsonResponse<T> { PRivate int status; //狀態碼 status_code private T data; public int getStatus_code() { return status; } public void setStatus_code(int status_code) { this.status = status_code; } public T getData() { return data; } public void setData(T data) { this.data = data; }}

關于這個對象,是為了結構化的Json而封裝的實體,起初我的Services接口中的接口是這么寫的:

@GET("user/{userid}") Observable<User> getUserById(@Path("userid")String userid);

可是當我發現轉換的實體對象的值全為null的時候:

{id='null', acount='null', name='null', email='null', emailConfirmed='null'....}

我注意了下 服務器所返回的json字符串:

{"status":0,"data":{"id":null,"acount":"xxxxxxxxx","name":null,"email":null,"emailConfirmed":null,"isLocked....

當然現在的后臺返回的數據大部分都是結構化的,所以這個問題只是當時我沒注意引起的。

開始請求mUserService=mRetrofit.create(IUserServices.class);mIUserServices .login(username,pwd) //登錄請求,傳入用戶名和密碼,返回Observable<ResponseBody> 對象 .subscribeOn(Schedulers.io()) //事件產生在io線程 .flatMap(new Func1<ResponseBody, Observable<JsonResponse<User>>>() { @Override public Observable<JsonResponse<User>> call(ResponseBody responseBody) { String userid = parse_Login(responseBody); //解析這個Response(相當于在解析 json),得到userid if("error".equals(userid)) { //status code >0 返回error,表示請求有誤 return Observable.error(new Throwable("信息錯誤"));//隨便返回了一個錯誤信息 } return mIUserServices.getUserById(userid); //如果有,證明請求成功,那么去查詢用戶 } }) .flatMap(new Func1<JsonResponse<User>, Observable<User>>() { @Override public Observable<User> call(JsonResponse<User> userJsonResponse) { return Observable.just(userJsonResponse.getData()); //將這個user發送出去 } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mPresenter.onError(e.getMessage()); } @Override public void onNext(User user) { System.out.println("--->user"+user); } });

重點內容

當使用map時候,你就不能使用 Observable.error()了,它會繼續往下執行,從而無法中斷這次鏈式。你需要使用 throw new 一個異常當使用flatmap時候,你要使用Observable.error()

就這樣。一個成功的嵌套請求+優雅的對Status code處理示例


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
神马国产精品影院av| 91精品久久久久久久久久久| 91精品久久久久久久久久| 欧美日韩999| 久精品免费视频| 久久夜精品va视频免费观看| 国产精品v片在线观看不卡| 亚洲人成电影网站色xx| 色综合久综合久久综合久鬼88| 国产91精品最新在线播放| 日韩中文字幕在线视频播放| 国产精品久久久久国产a级| 成人写真福利网| 在线观看成人黄色| 久久亚洲国产成人| 精品久久久久久| 精品国产一区二区三区久久| 亚洲成人精品视频| 中文字幕最新精品| 91亚洲国产精品| 91国内精品久久| 欧美激情影音先锋| 日本精品视频在线观看| 亚洲天堂成人在线| 日韩av中文字幕在线播放| 久久精品中文字幕一区| 国产精品com| www国产精品com| 欧美日韩精品在线播放| 久久精品91久久久久久再现| 欧美激情欧美狂野欧美精品| 久久久国产一区二区| 中文字幕亚洲自拍| 久久影视免费观看| 国产97免费视| 国产日韩在线看片| 亚洲国产精品一区二区三区| 国产日韩在线观看av| 在线观看不卡av| 亚洲电影免费观看高清完整版在线观看| 亚洲人精选亚洲人成在线| 日韩欧美极品在线观看| 欧美成人h版在线观看| 色综合天天综合网国产成人网| 国产999在线观看| 91精品国产综合久久香蕉的用户体验| 中文字幕亚洲第一| 精品久久久久久中文字幕大豆网| 日韩电影在线观看永久视频免费网站| 久久综合免费视频| 中文字幕自拍vr一区二区三区| 欧美精品久久一区二区| 色午夜这里只有精品| 久久久久国产精品www| 成人国产在线视频| 国产专区欧美专区| 国产成人精品一区| 亚洲精品短视频| 午夜精品在线观看| 亚洲自拍av在线| 欧美色xxxx| 国产精品一久久香蕉国产线看观看| 亚洲丁香久久久| 国产精品一区专区欧美日韩| 九九视频这里只有精品| 国产精品一区二区三区在线播放| 久久不射热爱视频精品| 精品久久久久久中文字幕大豆网| 亚洲xxxx在线| 78m国产成人精品视频| 日韩欧美国产骚| 久久免费在线观看| 色综合久久88色综合天天看泰| 欧美日本啪啪无遮挡网站| 成人性生交大片免费观看嘿嘿视频| 中文字幕亚洲情99在线| 欧美裸体男粗大视频在线观看| 欧美激情精品久久久久久变态| 国产精品欧美日韩一区二区| 国产一区av在线| 欧美日韩国产中字| 国产亚洲精品成人av久久ww| 在线电影欧美日韩一区二区私密| 欧美孕妇毛茸茸xxxx| 91精品国产91久久久久久吃药| 日韩精品在线免费| 久久成人亚洲精品| 国产成人在线一区二区| 国产91露脸中文字幕在线| 亚洲91精品在线观看| 亚洲一区二区三区xxx视频| 国产成人免费91av在线| 欧美激情亚洲精品| 欧美影院久久久| 亚洲国产精品yw在线观看| 国产精品亚洲欧美导航| 国产精品狠色婷| 夜夜狂射影院欧美极品| 中文亚洲视频在线| 久久久国产一区| 91精品综合久久久久久五月天| 另类天堂视频在线观看| 亚洲精品v天堂中文字幕| 亚洲欧洲午夜一线一品| 亚洲石原莉奈一区二区在线观看| 最近2019年日本中文免费字幕| 成人免费福利视频| 亚洲亚裔videos黑人hd| 中文字幕欧美精品日韩中文字幕| 亚洲成人黄色在线| 日韩在线观看免费高清| 日韩视频免费中文字幕| 日产日韩在线亚洲欧美| 高清欧美一区二区三区| 欧美午夜性色大片在线观看| www.国产一区| 精品亚洲精品福利线在观看| 国产欧美日韩亚洲精品| 欧美电影在线观看高清| 日韩av影院在线观看| 国产精品美女久久久免费| 国产香蕉97碰碰久久人人| 伊是香蕉大人久久| 欧美成人免费在线观看| 亚洲精品电影网在线观看| 亚洲成人三级在线| 久久综合免费视频影院| 精品无码久久久久久国产| 久久精品国产欧美激情| 亚洲黄色在线观看| 欧美日韩亚洲精品内裤| 久久久免费观看| 国产精品色婷婷视频| 日韩在线视频一区| 中日韩美女免费视频网址在线观看| 日韩美女视频在线观看| 亚洲网站视频福利| 91久热免费在线视频| 欧美成人免费在线视频| 成人福利视频网| 精品视频久久久| 欧美在线中文字幕| 亚洲第五色综合网| 亚洲精品久久在线| 午夜精品久久久久久99热软件| 亚洲欧美日韩国产中文| 欧美丰满少妇xxxxx| 国内精品久久久久久中文字幕| 欧美洲成人男女午夜视频| 欧美成人亚洲成人日韩成人| 日韩高清免费在线| 亚洲精品第一页| 欧美成年人网站| 91人人爽人人爽人人精88v| 清纯唯美日韩制服另类| 日韩在线视频二区| 色吧影院999| 久久久精品中文字幕| 成人午夜在线观看| 亚洲欧美日韩天堂| 国产视频精品免费播放| 精品电影在线观看| 91久久精品国产91久久性色| 国产精品成人观看视频国产奇米|