前言
現(xiàn)在的軟件開發(fā)世界里已經(jīng)出現(xiàn)了很多好用高效的開發(fā)框架尾抑,作為程序員的我們要隨時保持警惕歇父,緊跟潮流蒂培,學(xué)會使用大牛們所開發(fā)出來的東西,目前市場上對應(yīng)用RxJava+Retrofit+Okhttp(個人認(rèn)為優(yōu)點(diǎn)主要在業(yè)務(wù)處理與邏輯的簡化榜苫,小伙伴可以細(xì)心琢磨哦)已經(jīng)成為一種主流护戳,不會的小伙伴可以一起探討學(xué)習(xí)哦。
這個我推薦大家看看四篇文章
那么接下來如何運(yùn)用RxJava+Retrofit+Okhttp完成一次網(wǎng)絡(luò)請求呢垂睬,之前我也看了很多文章媳荒,但是做為剛?cè)腴T的我使用起來還是陌生,有些地方還是不太明白驹饺,這里不得不感謝一下我的同事钳枕,他這兩天確實(shí)拓寬了我很多的眼界,讓我對這個框架大致有了一個認(rèn)識赏壹。
按照傳統(tǒng)網(wǎng)絡(luò)處理方式么伯,我們一般或通過okhttp提交請求,對與請求后的數(shù)據(jù)處理卡儒,我想大多數(shù)人都是利用Handler機(jī)制,沒錯俐巴,Handler也是很不錯的骨望,但是考慮一種情況,當(dāng)還在網(wǎng)絡(luò)請求的時候欣舵,應(yīng)用突然結(jié)束怎么辦擎鸠,那這樣豈不是要造成內(nèi)存泄漏。而RxJava就可以很好的處理這個問題缘圈,那他是怎么做的呢劣光,就是RxJava其實(shí)有兩種對象在里面,就是大家所說的被觀察者和觀察者糟把,兩者之間是通過訂閱產(chǎn)生聯(lián)系绢涡,這個時候只要我們在應(yīng)用結(jié)束的時候取消訂閱,那么這個問題就解決了遣疯。
好話不多說雄可,那怎么才能利用這種框架完成網(wǎng)絡(luò)請求以及更加簡潔的刷新界面呢?
1.首先我們先做初始化
```
private static final int DEFAULT_TIME_OUT=5;//超時時間
? ? private static final int DEFAULT_READ_OUT=10;//讀超時時間
? ? private RetrofitmRetrofit=null;
? ? private static RetrofitServiceManagermRetrofitServiceManager=null;
? //構(gòu)造方法中去初始化Retrifit和Okhttp
? private RetrofitServiceManager(){
OkHttpClient.Builder builder=new OkHttpClient.Builder();
? ? ? HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor();
? ? ? httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
? ? ? builder.addInterceptor(httpLoggingInterceptor);
? ? ? builder.connectTimeout(DEFAULT_TIME_OUT, java.util.concurrent.TimeUnit.SECONDS);
? ? ? builder.readTimeout(DEFAULT_READ_OUT, java.util.concurrent.TimeUnit.SECONDS);
? ? ? //添加公共參數(shù)攔截器
// HttpCommonInterceptor httpCommonInterceptor;
//初始化Retrofit對象
? ? ? mRetrofit=new Retrofit.Builder()
.client(builder.build())//Okhttp對象
? ? ? ? ? ? ? .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(Constant.Base_url)
.build();
? }
//獲取實(shí)例
? ? public static RetrofitServiceManagergetInstance(){
if(mRetrofitServiceManager==null)
return new RetrofitServiceManager();
? ? ? ? return mRetrofitServiceManager;
? ? }
/**用于生成接口實(shí)例*/
? ? public T create(Class service){
return mRetrofit.create(service);
? ? }
```
說明
初始化Okhttp和Retrofit,Retrofit支持RxJava2響應(yīng)式的請求操作缠犀。create方法用生成service層的接口實(shí)例数苫。