網路請求OkHttp,Volley,Retrofit 使用的比較
OkHttp的使用
OkHttp現在最新的的版本在github上是3.5.0,它是來自Square公司。有以下幾個優點:
- 支援 SPDY1 ,允許連線同一主機的所有請求分享一個socket。
- 如果SPDY不可用,會使用連線池減少請求延遲。
- 使用GZIP壓縮下載內容,且壓縮操作對使用者是透明的。
- 利用響應快取來避免重複的網路請求。
接下來看下簡單的使用說明:
- 在gradle中配置:
compile 'com.squareup.okhttp3:okhttp:3.5.0'
- 初始化OkHttpClient物件以及Request物件
OkHttpClient mOkHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(uri).build();
OkHttp支援同步和非同步請求
- OkHttp同步請求的時候,執行execute()方法,返回一個Response物件,在這裡會阻塞執行緒,直到響應結束,所以是不能在主執行緒中執行。這裡是無返回值的。
Response response = mOkHttpClient.newCall(request).execute();
- OkHttp非同步請求的時候,執行enqueue()方法,在enqueue()中實現一個Callback介面,因為這個操作是非同步的,所以可以在主執行緒中使用。說的是響應資料是非同步的,但是不能直接再此更新UI元件,因為他是在okhttp執行緒中,直接在此更新UI會報錯。也許你會想到用Message物件將資料傳到主執行緒中,使用Handle來接收並更新UI。而我這裡使用的是Rxjava嵌入內部,被觀察者獲取到資料後傳遞給觀察者,指定觀察者的執行緒是Main主執行緒,就可以很方便的更新資料了。
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("lgq","error:"+e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i("lgq","okhttp response:" +response);
//封裝了觀察者物件程式碼
RequestObserable.responNetRequset(mRecyclerview,response.body().string(),getApplicationContext());
}
});
- 貼出RequestObserable程式碼:
public static void responNetRequset(final RecyclerView mRecyclerview, String result, final Context context) {
Gson gson = new Gson();
final NewsInfo newsInfo = gson.fromJson(result, NewsInfo.class);
Observable.create(new ObservableOnSubscribe<List<Contents>>() {
@Override
public void subscribe(ObservableEmitter<List<Contents>> e) throws Exception {
e.onNext(newsInfo.getResult().getList());
e.onComplete();
}
}).observeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Contents>>() {
@Override
public void onSubscribe(Disposable d) {
Log.i("lgq", "onSubscribe");
}
@Override
public void onNext(List<Contents> value) {
System.out.println("onNext()----Thread:" + Thread.currentThread().getName());
RecycleAdapter mAdapter = new RecycleAdapter(context, value);
//介面卡實現監聽事件
itemOnClick(mAdapter);
mRecyclerview.setLayoutManager(new LinearLayoutManager(context));
mRecyclerview.setAdapter(mAdapter);
}
@Override
public void onError(Throwable e) {
Log.i("lgq", "onError:" + e);
}
@Override
public void onComplete() {
Log.i("lgq", "onComplete()");
}
});
}
- 以上程式碼涉及到Gson 這個框架,是用來解析json資料到Java物件,可以參考這個瞭解下:你真的會用Gson嗎?Gson使用指南(一)
- OkHttp的使用流程大概簡單的說明就這樣。
1.okhttp-3.5.0.jar包大小342K。
Volley的使用
Volley現在最新的的版本在github上是1.0.19,在2013年Google I/O大會上推出的網路通訊框架。適用於進行資料量不大,但通訊頻繁的網路操作。
簡單的使用例子:
- 配置gradle
compile 'com.mcxiaoke.volley:library:1.0.19'
- 在Application中配置全域性單例的RequestQueue物件
//volley請求佇列
public static RequestQueue requestQueue;
public static RequestQueue getRequestQueue(){
return requestQueue;
}
@Override
public void onCreate() {
super.onCreate();
//初始化請求佇列
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
- Volley有StringRequest 請求物件和JsonRequest請求物件,這裡以JsonRequest為例:response即為響應返回獲得的json資料。RequestObserable在上面已經解釋了。
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, uri, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("lgq","volley response:"+response);
RequestObserable.responNetRequset(mRecyclerview,response.toString(),getApplicationContext());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("lgq","volley error:"+error);
}
});
//setting tag for cancel
jsonObjectRequest.setTag(VO_GET_TAG);
App.getRequestQueue().add(jsonObjectRequest);
- ok,無需過多的解釋吧,那繼續。在最後onStop()方法中關閉請求佇列。
@Override
protected void onStop() {
super.onStop();
//activity關閉的的時候取消請求佇列
App.getRequestQueue().cancelAll(VO_GET_TAG);
}
1.library-1.0.19.jar大小為91.6K。
Retrofit的使用
Retrofit現在最新的的版本在github上是2.1.0,也是Square公司的產品,Retrofit在2.0之後的版本和之前的變化很大,做出了優化和簡化,所以直接引入的是2.1.0版本。Retrofit的特點:
- 它是一個可以用於Android和java的網路庫,使用它可以簡化我們網路操作的工作,提高效率和正確率。
- gradle引入,這裡還引入了自己的gson庫,可實現將Json資料轉換為java物件。
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
- 將rest API封裝為java介面,我們根據業務需求來進行介面的封裝,實際開發可能會封裝多個不同的java介面以滿足業務需求。(註解的形式)
public interface RetrofitService {
@GET("get")
Call<NewsInfo> getListDatas(
@Query("channel")String str,
@Query("start")String start,
@Query("num")int num,
@Query("appkey")String appkey
);
}
- 使用Retrofit生成介面例項。
Retrofit retrofit = new Retrofit.Builder()
//設定baseUrl,注意baseUrl 應該以/ 結尾。
.baseUrl("http://api.jisuapi.com/news/")
//使用Gson解析器,可以替換其他的解析器
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient())
.build();
//利用Retrofit 建立服務介面
RetrofitService retrofitService = retrofit.create(RetrofitService.class);
- rest風格,更安全和高效。
- 通過介面例項實現Call方法,而且實現Callback介面是非同步請求,但是onResponse(),onFailure()都是在主執行緒中執行的。可以用來更新UI操作。
//實現介面引數
Call<NewsInfo> call = retrofitService.getListDatas("頭條","0",20,BaseActivity.getAPPKEY());
//執行非同步請求,這裡的onResponse(),onFailure()都是在主執行緒中執行的
call.enqueue(new Callback<NewsInfo>() {
@Override
public void onResponse(Call<NewsInfo> call, Response<NewsInfo> response) {
if (response.isSuccessful()){
RecycleAdapter mAdapter = new RecycleAdapter(getApplicationContext(),response.body().getResult().getList()); //初始化介面卡
RequestObserable.itemOnClick(mAdapter); //item監聽時間
mRecyclerview.setLayoutManager(linearLayoutManager);
mRecyclerview.setAdapter(mAdapter);
}
}
@Override
public void onFailure(Call<NewsInfo> call, Throwable t) {
Log.i("lgq","onFailure:"+t);
}
});
- 操作上明顯是比volley和okhttp簡單多了。
1.retrofit-2.1.0.jar大小為86.2K。
- SPDY(讀作“SPeeDY”)是Google開發的基於TCP的應用層協議,用以最小化網路延遲,提升網路速度,優化使用者的網路使用體驗。SPDY並不是一種用於替代HTTP的協議,而是對HTTP協議的增強。新協議的功能包括資料流的多路複用、請求優先順序以及HTTP報頭壓縮。谷歌表示,引入SPDY協議後,在實驗室測試中頁面載入速度比原先快64%。 ↩
相關推薦
網路請求OkHttp,Volley,Retrofit 使用的比較
OkHttp的使用 OkHttp現在最新的的版本在github上是3.5.0,它是來自Square公司。有以下幾個優點: 支援 SPDY1 ,允許連線同一主機的所有請求分享一個socket。 如果SPDY不可用,會使用連線池減少請求延遲。 使用GZIP
Xutils, OKhttp, Volley, Retrofit對比
操作 android開發 明顯 fit ima 是你 xutil 項目 全面 Xutils這個框架非常全面,可以進行網絡請求,可以進行圖片加載處理,可以數據儲存,還可以對view進行註解,使用這個框架非常方便,但是缺點也是非常明顯的,使用這個項目,會導致項目對這個框架依賴
Android網路請求操作Volley框架的使用
1. Volley框架的優缺點 1) 通訊更快更簡單 2) Get,Post網路請求及網路影象的高效率非同步處理 請求 3) 排序 4) 網路請求的快取 5) 多級別取消請求 6) 和Activity生命週期
Android肝帝戰紀之網路請求框架封裝(Retrofit的封裝)
網路請求框架封裝(OkHttp3+Retrofit+loading的封裝) Retrofit的Github連結 點此連結到Github AVLoadingIndicatorView的Github連結(封裝到請求框架中,請求過程中的loading樣式框(
Android網路請求開源框架retrofit的基本GET用法(2.4版本)
1.先在gradle配置retrfit版本如下: //rxjava/retrofit相關引入 compile 'io.reactivex.rxjava2:rxandroid:2.0.2' compile 'io.reactivex.rxjava2:rxjav
Android技術選型:你該選擇哪個網路請求開源庫(Volley、OkHttp、Retrofit)?
前言 網路請求在 Android 開發中非常常見,為了降低開發週期和難度,我們經常會選用網路請求的開源庫 而現在網路請求的開源庫越來越多,我們應該選用哪種呢? 今天我就給大家分別介紹 & 對比現今主流的網路請求庫。 目錄 1
安卓開發常用網路請求框架OkHttp、Volley、XUtils、Retrofit對比
網路請求框架總結1.xutils 此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域的
Retrofit+okhttp+Rxjava 網路請求
implementation 'io.reactivex:rxandroid:1.0.1' implementation 'com.squareup.retrofit2:retrofit:2.0.2' implementation 'com.squareup.retrofit2:conver
RxJava+Retrofit+OkHttp深入淺出-終極封裝二(網路請求)
CSDN部落格釋出了一系列的RxJava+Retrofit+OkHttp深入淺出-終極封裝 之前發出後收到很多朋友的關注,原本只是自己學習後的一些經驗總結,但是有同學運用到實戰當中,這讓我很惶恐,所有後續一直更新了很多次版本,有些地方難免有所變動導致之前的部落格有所出入,正好最近受到掘金邀請內測部落格,所以決
Retrofit 2.0使用詳解,配合OkHttp、Gson,Android最強網路請求框架
1.使用retrofit,需要下載一些jar包 2.介紹這些jar包的作用 在1.x版本的retrofit框架: 只需要Retrofit包和gson-2.4.jar包就行了,那時的Retrofit預設是使用okhttp jar包來網路請
解決利用Okhttp+Retrofit 傳送網路請求得到json是unicode
我們在用Okhttp和Retrofit傳送網路請求時,得到的json中漢子是unicode編碼,如圖 此時我們需要在Okhttp初始化的時候設定它的網路編輯器,同時將返回值的編碼改成UTF-8. 之前設定的OKhttp HttpLoggingInte
Retrofit + RxJava + OkHttp 讓網路請求變的簡單-封裝篇
前面一篇文章講了一下Retrofit+ RxJava 請求網路的一些基本用法,還沒有看過的可以去看一下Retrofit + RxJava + OkHttp 讓網路請求變的簡單-基礎篇,正如標題所說的,Retrofit+RxJava 是讓我們的網路請求變得簡單,程式碼精簡
Android okHttp網路請求之Retrofit+Okhttp+RxJava組合
前言: 通過上面的學習,我們不難發現單純使用okHttp來作為網路庫還是多多少少有那麼一點點不太方便,而且還需自己來管理介面,對於介面的使用的是哪種請求方式也不能一目瞭然,出於這個目的接下來學習一下Retrofit+Okhttp的搭配使用。 okHttp相關文章地址: Retrof
Android網路請求三方庫OkHttp,Retrofit的使用,及其註解使用的簡介
工作內容: 1.OkHttp的Post,Get請求 2.Retrofit的使用【更多詳情可以參考】 學習分享:[程式碼中使用了ButterKnife,參考ButterKnife使用] 1.OkHttp的使用步驟【注意同步載入最好放入子執行緒中:同步載入call.execut
打造屬於自己的網路請求框架(OKHttp+Retrofit+RxJava)
開發者們現在都在使用OkHttp了,在很多借鑑之後,現在也來封裝屬於自己的網路請求框架。 該框架使用Retrofit,OkHttp,RxJava,RxAndroid,Gson一起封裝。 客戶端請求一般分為如下幾步: 通過API向伺服器傳送請求------->伺服器收到
Android常用網路請求框架xUtils、OkHttp、Volley、Retorfit對比
網路請求框架總結1.xutils 此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域
Android小知識-剖析Retrofit中的網路請求流程以及相關引數
本平臺的文章更新會有延遲,大家可以關注微信公眾號-顧林海,包括年底前會更新kotlin由淺入深系列教程,目前計劃在微信公眾號進行首發,如果大家想獲取最新教程,請關注微信公眾號,謝謝! 在使用Retrofit時,需要建立Retrofit的例項,定義一個網路請求介面併為介面中的方法添加註解,接著通過動
Android小知識-剖析Retrofit中網路請求的兩種方式
本平臺的文章更新會有延遲,大家可以關注微信公眾號-顧林海,包括年底前會更新kotlin由淺入深系列教程,目前計劃在微信公眾號進行首發,如果大家想獲取最新教程,請關注微信公眾號,謝謝! 在上一節《Android小知識-剖析Retrofit中ServiceMethod相關引數以及建立過程》介紹了動態代
Retrofit網路請求庫
本文主要是參考慕課網Jennynick老師視訊所做出的總結。 一、首先明白一點: Retrofit是基於Okhttp網路框架進行的二次封裝,其本質仍是Okhttp。(類似烏爾奇奧拉的二段歸刃) 另外,科普一下,Android5.0之後不再使用HttpClient了。本來還想著看看http
Android RxJava操作符的學習---功能性操作符--網路請求出錯重連(結合Retrofit)
1. 需求場景 2. 功能說明 功能需求說明 功能邏輯 例項說明 在本例子中:採用Get方法對 金山詞霸API 傳送網路請求 通過 斷開網路連線 模擬 網路異常錯誤(恢復網路即可