Android okHttp網路請求之Retrofit+Okhttp+RxJava組合
前言:
通過上面的學習,我們不難發現單純使用okHttp來作為網路庫還是多多少少有那麼一點點不太方便,而且還需自己來管理介面,對於介面的使用的是哪種請求方式也不能一目瞭然,出於這個目的接下來學習一下Retrofit+Okhttp的搭配使用。
okHttp相關文章地址:
Retrofit介紹:
Retrofit和okHttp師出同門,也是Square的開源庫,它是一個型別安全的網路請求庫,Retrofit簡化了網路請求流程,基於OkHtttp做了封裝,解耦的更徹底:比方說通過註解來配置請求引數,通過工廠來生成CallAdapter,Converter,你可以使用不同的請求介面卡(CallAdapter), 比方說RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方說json, protobuff, xml, moshi等等。
- 官網 http://square.github.io/retrofit/
- github https://github.com/square/retrofit
Retrofit+OkHttpClient使用:
1.)在build.gradle中新增如下配置
compile 'com.squareup.retrofit2:retrofit:2.1.0'
2.)初始化Retrofit
retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(FastJsonConverterFactory.create()) .client(mOkHttpClient) .build();
3.)初始化OkHttpClient
OkHttpClient.Builder builder = new OkHttpClient().newBuilder() .connectTimeout(10, TimeUnit.SECONDS)//設定超時時間 .readTimeout(10, TimeUnit.SECONDS)//設定讀取超時時間 .writeTimeout(10, TimeUnit.SECONDS);//設定寫入超時時間 int cacheSize = 10 * 1024 * 1024; //10 MiB Cache cache = new Cache(App.getContext().getCacheDir(), cacheSize); builder.cache(cache); builder.addInterceptor(interceptor); mOkHttpClient = builder.build();
關於okHttp的攔截器、Cache-Control等這裡就不再做解說了
4.)關於ConverterFactory
對於okHttpClient的初始化我們都已經很熟悉了,對ConverterFactory初次接觸多少有點陌生,其實這個就是用來統一解析ResponseBody返回資料的。
常見的ConverterFactory
- Gson:
com.squareup.retrofit2:converter-gson
- Jackson:
com.squareup.retrofit2:converter-jackson
- Moshi:
com.squareup.retrofit2:converter-moshi
- Protobuf:
com.squareup.retrofit2:converter-protobuf
- Wire:
com.squareup.retrofit2:converter-wire
- Simple XML:
com.squareup.retrofit2:converter-simplexml
- Scalars (primitives, boxed, and String):
com.squareup.retrofit2:converter-scalars
由於專案中使用的是FastJson,所以只能自己自定義ConverterFactory,不過國內已經有大神對此作了封裝(http://www.tuicool.com/articles/j6rmyi7)。
- FastJson compile 'org.ligboy.retrofit2:converter-fastjson-android:2.0.2'
5.)定義介面 get 請求
1.get請求 不帶任何引數
public interface IApi { @GET("users")//不帶引數get請求 Call<List<User>> getUsers(); }
2.get請求 動態路徑 @Path使用
public interface IApi { @GET("users/{groupId}")//動態路徑get請求 Call<List<User>> getUsers(@Path("userId") String userId); }
3.get請求 拼接引數 @Query使用
public interface IApi { @GET("users/{groupId}") Call<List<User>> getUsers(@Path("userId") String userId, @Query("age")int age); }
3.get請求 拼接引數 @QueryMap使用
public interface IApi { @GET("users/{groupId}") Call<List<User>> getUsers(@Path("userId") String userId, @QueryMap HashMap<String, String> paramsMap); }
6.)定義介面 post請求
1.post請求 @body使用
public interface IApi { @POST("add")//直接把物件通過ConverterFactory轉化成對應的引數 Call<List<User>> addUser(@Body User user); }
2.post請求 @FormUrlEncoded,@Field使用
public interface IApi { @POST("login") @FormUrlEncoded//讀引數進行urlEncoded Call<User> login(@Field("userId") String username, @Field("password") String password); }
3.post請求 @FormUrlEncoded,@FieldMap使用
public interface IApi { @POST("login") @FormUrlEncoded//讀引數進行urlEncoded Call<User> login(@FieldMap HashMap<String, String> paramsMap); }
4.post請求 @Multipart,@Part使用
public interface IApi { @Multipart @POST("login") Call<User> login(@Part("userId") String userId, @Part("password") String password); }
7.)Cache-Control快取控制
public interface IApi { @Headers("Cache-Control: max-age=640000") @GET("users")//不帶引數get請求 Call<List<User>> getUsers(); }
8.)請求使用
1.返回IApi
/** * 初始化Api */ private void initIApi() { iApi = retrofit.create(IApi.class); } /** * 返回Api */ public static IApi api() { return api.iApi; }
2.傳送請求
Call<String> call = Api.api().login(userId,password); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { Log.e("", "response---->" + response.body()); } @Override public void onFailure(Call<String> call, Throwable t) { Log.e("", "response----失敗"); } });
Retrofit+RxJava使用:
上面介紹了Retrofit 與OkHttp的結合,下面介紹一下Retrofit與RxJava的結合,RxJava作為當前的開源庫的網紅之一,Retrofit理所當然也提供了對其的支援,RxJava的強大之處強大的非同步處理能力,Retrofit與RxJava的結合勢必提高開發效率以及執行效能。
1.)在原來的基礎上新增以下依賴
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1' // Retrofit的rx解析庫
compile 'io.reactivex:rxandroid:1.2.0'
compile 'io.reactivex:rxjava:1.1.5'
2.)建立retrofit物件例項時,通過addCallAdapterFactory來新增對RxJava的支援
/** * 初始化Retrofit */ private void initRetrofit() { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(FastJsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(mOkHttpClient) .build(); }
3.)定義請求介面
public interface IApi { @POST("system/login") Observable<String> systemLogin(@Body String userId, @Body String password);
}
4.)呼叫傳送請求
Api.api().systemLogin(userId,password) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String result) { } });
總結:
這裡簡單介紹了Retrofit與Okhttp、RxJava的結合使用。
相關推薦
Android okHttp網路請求之Retrofit+Okhttp+RxJava組合
前言: 通過上面的學習,我們不難發現單純使用okHttp來作為網路庫還是多多少少有那麼一點點不太方便,而且還需自己來管理介面,對於介面的使用的是哪種請求方式也不能一目瞭然,出於這個目的接下來學習一下Retrofit+Okhttp的搭配使用。 okHttp相關文章地址: Retrof
Android 網路開發(一) okHttp網路請求之快取控制Cache-Control
Cache-Control: Cache-Control指定請求和響應遵循的快取機制。在請求訊息或響應訊息中設定Cache-Control並不會修改另一個訊息處理過程中的快取處理過程。請求時的快取指令有下幾種: Public指示響應可被任何快取區快取。 Private指示對於單個
Android okHttp網路請求之快取控制Cache-Control
前言: 前面的學習基本上已經可以完成開發需求了,但是在專案中有時會遇到對請求做個快取,當沒網路的時候優先載入本地快取,基於這個需求我們來學習一直okHttp的Cache-Control。 okHttp相關文章地址: Cache-Control: Cache-Contro
Android okHttp網路請求之檔案上傳下載
前言: 前面介紹了基於okHttp的get、post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天來實現一下基於okHttp的檔案上傳、下載。 okHttp相關文章地址: 檔案上傳: 1.)不帶引數上傳檔案
Android okHttp網路請求之Get/Post請求
前言: 之前專案中一直使用的Xutils開源框架,從xutils 2.1.5版本使用到最近的xutils 3.0,使用起來也是蠻方便的,只不過最近想著完善一下app中使用的開源框架,由於Xutils裡面包含的東西相對來說比較雜,有資料庫、圖片快取、註解、網路請求等等,秉著一個開源庫只處理一
Android okHttp網路請求之Json解析
前言: 前面兩篇文章介紹了基於okHttp的post、get請求,以及檔案的上傳下載,今天主要介紹一下如何和Json解析一起使用?如何才能提高開發效率? okHttp相關文章地址: 關於Json解析: 本文的Json解析採用阿里巴巴的FastJson 解析,也可以採用Gso
Android網路請求之OkHttp框架
首先宣告許可權 <uses-permission android:name="android.permission.INTERNET"/> 在build.gradle中加入 compile 'com.squareup.okhttp:okhttp:2.4.0' compile
Android網路請求三方庫OkHttp,Retrofit的使用,及其註解使用的簡介
工作內容: 1.OkHttp的Post,Get請求 2.Retrofit的使用【更多詳情可以參考】 學習分享:[程式碼中使用了ButterKnife,參考ButterKnife使用] 1.OkHttp的使用步驟【注意同步載入最好放入子執行緒中:同步載入call.execut
Android----------OkHttp網路請求框架Get和Post簡單封裝(泛型)
請求框架的類: OkHttp依賴: compile 'com.squareup.okhttp3:okhttp:3.8.1' RecyclerView依賴: compile 'com.android.support:recyclerview-v7:26.0.0-alpha1
Android 的OkHttp 網路請求框架的學習封裝
自述:在此以前,自己從來沒有寫過部落格,今天是第一次寫,真心是有點小激動,正要下筆卻不知道應該從何說起,若是寫的不好,請各位見諒吧!關於網路請求,我自認為自己是一個菜鳥,沒有任何經驗,之前做的專案都是別人封裝好,告訴我怎麼呼叫就好了。至於怎麼封裝邏輯的,真是一竅不通,可近來
Android常用網路請求框架xUtils、OkHttp、Volley、Retorfit對比
網路請求框架總結1.xutils 此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域
Android網路請求框架Retrofit使用介紹
前言 在android開發中,網路請求是最常用的操作之一,目前熱門的網路請求框架有:Retrofit、volley、okhttp、Android-Async-Http,這裡公司專案中用到Retrofit,之前沒了解過,這裡做個學習記錄。 本文參考博文:這是一份很詳細的 Retrofit 2.
OkHttp網路請求
build.gradle裡新增 implementation 'com.squareup.okhttp3:okhttp:3.4.2' .activity private GridAdapter mGridAdapter; //獲得九宮格資料 okhttpnet2 = new o
Fragment標籤頁+OKHttp網路請求資料+MVP模式
分包方式 需要的第三方依賴 Fragment 新建兩個fragment MainActivity 主頁面佈局 設定Fragment+tablayout的介面卡 Fragment標籤頁結束 OKHttp網路請求 okhttputils工具類
列印完整的okhttp網路請求和響應訊息
背景 開發中,有時需要核對介面請求和響應引數,需要看到詳細的介面呼叫。本來可以通過Facebook Stetho來監控介面的,但是受限於網路,導致調測介面打不開,所以只要尋求其他方案。 解決方案 通過okhttp新增攔截器,列印介面呼叫日誌。 新增依賴 imple
Okhttp網路請求最佳實踐(一)
首先是實現網路的配置: 先獲取網路許可權; 再宣告兩個變數,有關網路操作許可權的; 宣告一個url地址。 public class constants { private static final int WRITE_READ_EXTERNASL_CODE=
okhttp網路請求(基礎)
**加依賴:implementation 'com.squareup.okhttp3:okhttp:3.12.0'** kage com.gj.logindemo.http; import java.io.File; import java.io.IOException; import
Okhttp網路請求+Recyclerview展示資料
首先匯入依賴 //Recyclerview是listview的升級版 implementation 'com.android.support:recyclerview-v7:28.0.0' //okhttp impleme
主流mwp框架+OKHttp網路請求xRecycleView展示
MainActivity package com.zjh.administrat.recyclerviewdemo3.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; imp
OkHttp網路請求資料
OkHttpUtils package com.bawei.mymvp.okHttp; import android.os.Handler; import android.os.Looper; import com.bawei.mymvp.Constants; import com.