android網絡組件的對比

volley
作爲谷歌親兒子,是如何一步步失寵的?一開始同組的同事用,後來大家都不用了
引用很簡單:compile ‘com.mcxiaoke.volley:library:1.0.19’
或者直接複製粘貼lib庫
然後就可以用StringRequest、JsonObjectRequest或者JsonArrayRequest來發送請求。
然後網上比較好的封裝思路是:
發送get請求
發送post請求
加載網絡圖片
上傳圖片
但我在實際使用中發現一個問題,接收到的json內容中包括漢字時會是亂碼用UrlDEcode解析也不行,於是找了找發現,解決方法只有一個,繼承組建提供的StringRequest,重寫parseNetworkResponse並在其中解析返回值

protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String parsed;
        try {
            parsed = new String(response.data, "utf-8");
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
    }

所以我想說在這一點上volley不如okhttp好用,而且它已經停止維護了。
需要說明一點,在使用tls2.0時訪問put接口出現正常提交返回異常的問題,此問題有可能與服務器或者volley有關

Retrofit
Retrofit和OkHttp3它其實是一樣的,Retrofit是在okhttp上進行封裝的,使用的是註解方式,使用起來相當方便,並且有很好的擴展性。
引用方法:compile ‘com.squareup.retrofit2:retrofit:2.0.2’
在Retrofit 2.0中,Converter 不再包含在package 中了,不插入Converter時Retrofit 只能接收字符串結果,如果啓用需要引入依賴:compile ‘com.squareup.retrofit:converter-gson:2.0.2’
這個就是看着複雜,但寫起來還挺容易的,結構上需要創建挺多實體類用於接數據。
目前遇到的一個問題是,在後端返回值書寫不規範的情況時會報異常
舉個例子:正常返回List 結構爲Array,異常返回了“”,對返回了一個空字符串,應該返回“{}”就不會報錯了,所以這個組件我建議你和後端商量着來。

picasso與retrofit一樣都是在okhttp基礎之上做的封裝,項目中可以直接用了。

okhttp-utils是洪洋大神在okhttp上進行的封裝開源庫,剛好彌補了二次封裝的缺陷,是目前封裝的比較好的,同事超喜歡用這個,因爲17年底停止維護了,我之前不慎踩坑現在使用Retrofit。
compile files(‘libs/okhttputils-2_6_2.jar’)
配置,在application中:

//https證書設置
//默認
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
//證書
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(證書的inputstream, null, null);
//雙向認證
HttpsUtils.getSslSocketFactory(
    證書的inputstream, 
    本地證書的inputstream, 
    本地證書的密碼)
//設置
OkHttpClient okHttpClient = new OkHttpClient.Builder()
	//訪問https
    .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
//  .addInterceptor(new LoggerInterceptor("TAG"))
    .connectTimeout(10000L, TimeUnit.MILLISECONDS)
    .readTimeout(10000L, TimeUnit.MILLISECONDS)
    //其他配置
    .build();
 OkHttpUtils.initClient(okHttpClient);

注意:execute方法不傳入callback即爲同步的請求,返回Response
而一般情況下我們
一般訪問:StringCallback
下載圖片:BitmapCallback
下載文件:FileCallBack

OKHTTP
okhttp 和 async http是一個基礎的通信庫,都很強大,但需要自己封裝使用才更方便,目前被谷歌官方用在android源碼中了。
高性能的http庫,支持同步、異步,而且實現了spdy、http2、websocket協議,api很簡潔易用,和volley一樣實現了http協議的緩存。
我遇到的幾個問題是:
call返回時是子線程
終止請求困難

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章