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

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

歡迎使用CSDN-markdown編輯器

2019-11-09 14:46:17
字體:
來源:轉載
供稿:網友

前情提示: 本文只是一個例子,不做過多講解,入門知識推薦參考 仍物線大神講解的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
久久精品国产99国产精品澳门| 国产成人精品免高潮费视频| 欧美成人免费在线视频| 伊人久久综合97精品| 在线日韩日本国产亚洲| 日本在线观看天堂男亚洲| 日韩亚洲欧美中文高清在线| 亚洲最新在线视频| 色偷偷av一区二区三区乱| 欧美国产日本在线| 久久久久久久久久久久av| 欧美性jizz18性欧美| 欧美大荫蒂xxx| 欧美激情奇米色| 日本高清不卡在线| 国产欧美va欧美va香蕉在线| 亚洲香蕉在线观看| 97在线视频观看| 欧美人交a欧美精品| 亚洲精品在线91| 欧美日韩亚洲高清| 国内精品久久久久影院 日本资源| 在线观看久久av| 亚洲第一天堂av| 91福利视频在线观看| 日韩av在线免费观看一区| 国产成人精品一区二区三区| 亚洲福利在线观看| 久久精品2019中文字幕| 国产精品美女久久| 中文字幕久热精品在线视频| 日韩欧美999| 国产精品91久久| 欧美一性一乱一交一视频| www日韩中文字幕在线看| 日本高清视频一区| 欧美成人精品不卡视频在线观看| 日韩欧美在线视频日韩欧美在线视频| 国产精品2018| 国产综合久久久久久| 国产精品视频地址| 色综合色综合久久综合频道88| 亚洲成人黄色在线观看| 日韩最新免费不卡| 国产成人欧美在线观看| 日韩中文字在线| 亚洲人午夜精品| 国产精品久久二区| 国产一区二区三区精品久久久| 性色av一区二区三区| 懂色av一区二区三区| 精品成人乱色一区二区| 最新91在线视频| 亚洲高清福利视频| 日本久久久久久久| 日韩中文字幕在线播放| 久久亚洲精品视频| 羞羞色国产精品| 欧美午夜精品久久久久久久| 久久久亚洲欧洲日产国码aⅴ| 欧美视频一二三| 青青在线视频一区二区三区| 亚洲精品在线视频| 91高清在线免费观看| 欧美二区在线播放| 国产丝袜一区视频在线观看| 色综合视频一区中文字幕| 久久久久久国产精品| 成人夜晚看av| 国产伊人精品在线| 在线观看视频99| 国产啪精品视频网站| 国产婷婷97碰碰久久人人蜜臀| 亚洲欧洲美洲在线综合| 亚洲日本欧美中文幕| 国产精品爱久久久久久久| 久久91亚洲人成电影网站| 日韩中文字幕在线播放| 国产精欧美一区二区三区| 欧美精品在线播放| 国产精品视频最多的网站| 亚洲人成亚洲人成在线观看| 日韩av毛片网| 97超视频免费观看| 欧美精品videosex牲欧美| 亚洲视频在线看| 欧美国产精品va在线观看| 日本亚洲精品在线观看| 欧美高清一级大片| 亚洲人成77777在线观看网| 日韩高清免费在线| 在线精品高清中文字幕| 色与欲影视天天看综合网| 亚洲欧美激情精品一区二区| 国产亚洲精品久久久久久777| 国产精品久久久久久久久久久久久| 亚洲欧美日韩另类| 亚洲电影免费观看高清完整版在线| 亚洲网站在线看| 亚洲男人天堂网站| 欧美激情视频在线免费观看 欧美视频免费一| 国产人妖伪娘一区91| 久久99精品久久久久久青青91| 91高清免费视频| 国内精品一区二区三区| 国产精品久久一| 亚洲欧洲一区二区三区在线观看| 亚洲成人激情视频| 在线日韩日本国产亚洲| 亚洲91精品在线| 午夜精品一区二区三区在线视| 亚洲午夜久久久影院| 国产精品91在线观看| 国产精品久久久久av免费| 欧美一级成年大片在线观看| 91免费的视频在线播放| 亚洲国产又黄又爽女人高潮的| 久久久久久久一区二区三区| 久久亚洲一区二区三区四区五区高| 国产亚洲精品久久久久久777| www欧美xxxx| 欧美日韩爱爱视频| 国产精品免费小视频| 欧美日韩精品中文字幕| 色无极亚洲影院| 精品日韩美女的视频高清| www亚洲欧美| 欧美精品成人91久久久久久久| 亚洲图片在区色| 国产专区欧美专区| 亚洲国产精品人久久电影| 亚洲成色777777女色窝| 国产亚洲欧洲黄色| 久久久日本电影| 亚洲精品福利资源站| 日韩亚洲第一页| 国产日韩av在线| 欧美在线一级va免费观看| 亚洲第一av网站| 亚洲深夜福利在线| 97在线观看免费高清| 日本欧美黄网站| 国产欧美一区二区| 国内精品免费午夜毛片| 欧美成人免费网| 欧美巨大黑人极品精男| 欧美激情第6页| 在线电影欧美日韩一区二区私密| 日韩欧美在线国产| 日韩在线播放一区| 91精品视频免费看| 成人午夜一级二级三级| 爽爽爽爽爽爽爽成人免费观看| 国产成人一区二| 国产婷婷成人久久av免费高清| 91极品视频在线| 成人午夜激情网| 国产精品揄拍一区二区| 久久久91精品国产| 久久久久国产精品一区| 在线一区二区日韩| 亚洲视频一区二区三区| 久久综合伊人77777蜜臀| 91夜夜揉人人捏人人添红杏|