Retrofit-RxJava
項目簡介
采用Retrofit+RxJava作為Http框架
github:https://github.com/javalong/Retrofit-RxJava
快速接入
-
添加項目 module 或 引入依賴
compile 'com.javalong:retrofit-rxjava:1.0.0'
-
在使用之前調(diào)用代碼初始化
RetrofitHelper.getInstance().init(this,baseUrl);
baseUrl作為http請求的前綴.
-
注冊自己需要的Api
RetrofitHelper.getInstance().registerApi(ServerApi.class);
-
添加自己的Http請求
模仿demo中的
ServerApi.java
中的Http請求矾利,自定義自己的Http請求也可參考上面的blog.
-
調(diào)用方法Http請求
參考demo
功能介紹
-
主要支持如下json格式
{ data:{}, errorCode:200, moreInfo:"", ... ... }
可以同級添加需要的字段咨察,主要的數(shù)據(jù)在data中。
可以在
ResponseMessageBean.java
自定義字段 -
支持轉(zhuǎn)化基本類型
Observable<Boolean> postBoolSuccess(); Observable<Integer> postIntSuccess(); ... ...
-
支持不處理操作呕臂,直接返回請求的內(nèi)容
@GET("{requestUrl}") Observable<String> get(@Path("requestUrl") String requestUrl, @Header("origion")boolean origion);
在任意的請求方法中多添加一個參數(shù)
@Header("origion")boolean origion
,然后傳入true
具體實現(xiàn):
TWInterceptor.java
... if (origion != null && origion) { return onSuccess(originalResponse, jsonString); } ... String origion = newRequest.header("origion"); ...
-
支持泛型轉(zhuǎn)換
//ServerApi.java中聲明 @POST("postSuccess") Observable<TestBean> postSuccess(); //調(diào)用后直接返回解析好的內(nèi)容 RetrofitHelper.getApi().postSuccess() .subscribe(new Observer<TestBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { tvConvert.setText(e.getMessage()); } @Override public void onNext(TestBean s) { tvConvert.setText(s.toString()); } });
轉(zhuǎn)換成泛型對象旦签,具體使用到的數(shù)據(jù)查坪,是返回的json對象中的data字段。
-
支持List泛型轉(zhuǎn)換
@POST("postListSuccess") Observable<List<TestBean>> postListSuccess();
-
支持請求失敗處理
在本項目中如果errorCode!=200認為是失敗宁炫,會拋出異常偿曙,進入RxJava的onError回調(diào)。
如果是網(wǎng)絡問題羔巢,造成的請求失敗望忆,同樣也會進入onError回調(diào)罩阵。
支持https
-
支持自定義OkHttpClient
初始化時,可以調(diào)用
RetrofitHelper.getInstance().init(this,baseUrl,okHttpClient);
默認OkHttpClient為
Cache cache = new Cache(new File(mContext.getCacheDir(), "HttpCache"), 1024 * 1024 * 100); mOkHttpClient = new OkHttpClient.Builder(). addInterceptor(mInterceptor). retryOnConnectionFailure(false). connectTimeout(30, TimeUnit.SECONDS). sslSocketFactory(sslContext.getSocketFactory()). hostnameVerifier(DO_NOT_VERIFY). cache(cache). build();
100M緩存,30m秒超時启摄,失敗不重試
-
支持自定義Interceptor
interceptor是okHttpClient的一個屬性永脓,如果不需要全部自定義OkHttpClicent,只想自定義Interceptor
可以調(diào)用.RetrofitHelper.getInstance().init(this,baseUrl,interceptor);
傳入的interceptor需要繼承l(wèi)ib中的TWInterceptor.
作用:
- 自定義 onSuccess回調(diào)鞋仍。
- 支持用戶對某一類errorCode做統(tǒng)一處理在 onFailed中
- 自定義UserAgent
-
優(yōu)化鏈式結構
不需要在請求中都添加
subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
已經(jīng)在
TWJavaCallAdapterFactory.java
中全局添加