1. 程式人生 > >轉載-ym—— Android網路框架Volley(體驗篇)

轉載-ym—— Android網路框架Volley(體驗篇)

Volley是Google I/O 2013推出的網路通訊庫,在volley推出之前我們一般會選擇比較成熟的第三方網路通訊庫,如:

他們各有優劣,之前個人則比較喜歡用android-async-http, 如今Google推出了官方的針對Android平臺上的網路通訊庫,能使網路通訊更快,更簡單,更健壯,Volley在提供了高效能網路通訊功能的同時,對網路圖片載入也提供了良好的支援,完全可以滿足簡單REST客戶端的需求, 我們沒有理由不跟上時代的潮流

使用Volley

下載Volley原始碼並build jar包。

$ git clone https://android.googlesource.com/platform/frameworks/volley
$ cd volley
$ android update project -p
$ ant jar

然後把生成的jar包引用到我們的專案中,extras目錄下則包含了目前最新的volley原始碼。

說明

此Demo主要介紹了日常網路開發常用的基本功能,但volley的擴充套件性很強,可以根據需要定製你自己的網路請求。


以上是在Google IO的演講上ppt的配圖,從上面這張圖我們可以看出,volley適合快速,簡單的請求(Json物件,圖片載入)。

volley的特性:

  • JSON,影象等的非同步下載;
  • 網路請求的排序(scheduling)
  • 網路請求的優先順序處理
  • 快取
  • 多級別取消請求
  • 和Activity和生命週期的聯動(Activity結束時同時取消所有網路請求)

接下來,我們來學習簡單的使用下volley給我提供的API吧。

1.首先拿到一個請求佇列(RequestQueue只需要一個例項即可,不像AsyncTask每次使用都要new一個)

[java] view plaincopyprint?
  1. // 初始化RequestQueue一個activity只需要一個
  2.     privatevoid initRequestQueue() {  
  3.         mQueue = Volley.newRequestQueue(getApplicationContext());  
  4.     }  

2.實現volley的非同步請求類(JsonObjectRequest,JsonArrayRequest,StringRequest,ImageRequest

由於用法都相差不大,我就不一一舉例了,舉幾個常用有代表性的例子:

以下程式碼是StringRequest的get請求:

[java] view plaincopyprint?
  1. // get請求
[java] view plaincopyprint?
  1. privatevoid loadGetStr(String url) {  
  2.     StringRequest srReq = new StringRequest(Request.Method.GET, url,  
  3.             new StrListener(), new StrErrListener()) {  
  4.         protectedfinal String TYPE_UTF8_CHARSET = "charset=UTF-8";  
  5.         // 重寫parseNetworkResponse方法改變返回頭引數解決亂碼問題
  6.         // 主要是看伺服器編碼,如果伺服器編碼不是UTF-8的話那麼就需要自己轉換,反之則不需要
  7.         @Override
  8.         protected Response<String> parseNetworkResponse(  
  9.                 NetworkResponse response) {  
  10.             try {  
  11.                 String type = response.headers.get(HTTP.CONTENT_TYPE);  
  12.                 if (type == null) {  
  13.                     type = TYPE_UTF8_CHARSET;  
  14.                     response.headers.put(HTTP.CONTENT_TYPE, type);  
  15.                 } elseif (!type.contains("UTF-8")) {  
  16.                     type += ";" + TYPE_UTF8_CHARSET;  
  17.                     response.headers.put(HTTP.CONTENT_TYPE, type);  
  18.                 }  
  19.             } catch (Exception e) {  
  20.             }  
  21.             returnsuper.parseNetworkResponse(response);  
  22.         }  
  23.     };  
  24.     srReq.setShouldCache(true); // 控制是否快取
  25.     startVolley(srReq);  
  26. }  

以下程式碼是JsonObjectRequest的post請求: [java] view plaincopyprint?
  1. // post請求
  2. privatevoid loadPostJson(String url) {  
  3.     // 第二個引數說明:
  4.     // Constructor which defaults to GET if jsonRequest is null, POST
  5.     // otherwise.
  6.     // 預設情況下設成null為get方法,否則為post方法。
  7.     JsonObjectRequest srReq = new JsonObjectRequest(url, null,  
  8.             new JsonListener(), new StrErrListener()) {  
  9.         @Override
  10.         protected Map<String, String> getParams() throws AuthFailureError {  
  11.             Map<String, String> map = new HashMap<String, String>();  
  12.             map.put("w""2459115");  
  13.             map.put("u""f");  
  14.             return map;  
  15.         }  
  16.     };  
  17.     srReq.setShouldCache(false); // 控制是否快取
  18.     startVolley(srReq);  
  19. }  

大家注意看的話,無論是JsonObjectReques的postt還是StringRequest的get都需要傳入兩個監聽函式一個是成功一個是失敗,成功監聽他們會返回相應型別的資料: [java] view plaincopyprint?
  1. // Str請求成功回撥
  2. privateclass StrListener implements Listener<String> {  
  3.     @Override
  4.     publicvoid onResponse(String arg0) {  
  5.         Log.e(Tag, arg0);  
  6.     }  
  7. }  
  8. // Gson請求成功回撥
  9. privateclass GsonListener implements Listener<ErrorRsp> {  
  10.     @Override
  11.     publicvoid onResponse(ErrorRsp arg0) {  
  12.         Toast.makeText(mContext, arg0.toString(), Toast.LENGTH_LONG).show();  
  13.     }  
  14. }  
  15. // 共用失敗回撥
  16. privateclass StrErrListener implements ErrorListener {  
  17.     @Override
  18.     publicvoid onErrorResponse(VolleyError arg0) {  
  19.         Toast.makeText(mContext,  
  20.                 VolleyErrorHelper.getMessage(arg0, mContext),  
  21.                 Toast.LENGTH_LONG).show();  
  22.     }  
  23. }  
接下來是ImageRequest [java] view plaincopyprint?
  1. /** 
  2.  * 第三第四個引數分別用於指定允許圖片最大的寬度和高度,如果指定的網路圖片的寬度或高度大於這裡的最大值,則會對圖片進行壓縮, 
  3.  * 指定成0的話就表示不管圖片有多大,都不會進行壓縮。 
  4.  *  
  5.  * @param url 
  6.  *            圖片地址 
  7.  * @param listener 
  8.  * @param maxWidth 
  9.  *            指定允許圖片最大的寬度 
  10.  * @param maxHeight 
  11. 相關推薦

    轉載-ym—— Android網路框架Volley(體驗)

    Volley是Google I/O 2013推出的網路通訊庫,在volley推出之前我們一般會選擇比較成熟的第三方網路通訊庫,如: 他們各有優劣,之前個人則比較喜歡用android-async-http, 如今Google推出了官方的針對Android平臺上的網路通訊庫,能使網路通訊更快

    (轉)ym—— Android網路框架Volley(實戰)

    從上一篇來看 mQueue 只需要一個物件即可,new RequestQueue物件對資源一種浪費,我們應該在application,以及可以把取消請求的方法也在application進行統一管理,看以下程式碼: [java] view plaincopyprint?

    Android網路框架Volley(實戰)

    之前講了ym—— Android網路框架Volley(體驗篇),大家應該瞭解了volley的使用,接下來我們要看看如何把volley使用到實戰專案裡面,我們先考慮下一些問題: 從上一篇來看 mQueue 只需要一個物件即可,new RequestQueue物件對資源一種浪費

    Android網路框架Volley

                    Volley是Google I/O 2013推出的網路通訊庫,在volley推出之前我們一般會選擇比較成熟的第三方網路通訊庫,如:他們各有優劣,之前個人則比較喜歡用android-async-http, 如今Google推出了官方的針對Android平臺上的網路通訊庫,能使網路

    Android網路框架volley學習(三)底層網路請求分析

    相關文章 前面我們分析了一下volley的基本用法及總體工作流程,由於volley是一個網路請求框架,所以本篇我們分析一下它的底層網路請求。 volley原始碼說長不長,說短不短,也有幾十個類,該從哪裡開始分析呢?我們從最基本的開始分析,還記得一開始進行

    Android網路框架Volley的用法

    Volley是在Google I/O 2013上釋出的一框網路通訊http模組,新版本的Android已經廢除了HttpClient的使用,目前主流的android網路通訊庫有:Async-Http、NoHttp、xUtil等。本文就自己學習了Volley一些相

    Android官方網路框架——volley的封裝

    使用場景 Android系統中主要提供了兩種方式來進行HTTP通訊,HttpURLConnection和HttpClient,幾乎在任何專案的程式碼中我們都能看到這兩個類的身影,使用率非常高。不過HttpURLConnection和HttpClient的用法還是稍微有些複雜

    android網路框架的封裝——volley

    本文主要用程式碼給出如何對volley進行封裝制定出自己的request,實現專案工程中自己的網路請求框架,主要參考的是郭大神的部落格http://blog.csdn.net/guolin_blog/article/details/17612763 首先給出自定義的Requ

    Android網路框架初步嘗試

    最近面試了很多公司,感慨良多,面試官都強調要多寫技術文章,多閱讀原始碼。仔細想想確實如此,想成為一名好的Android工程師,如果沒有原始碼閱讀,怎麼能寫出好的程式碼那。 因為是第一篇文章,肯定想拿出一點好東西帶大家分享。想想看自己也就寫過一個網路框架可以拿出來談談。 首先介紹我這個

    教你寫Android網路框架之基本架構

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    Android網路框架Retrofit2使用封裝:Get/Post/檔案上傳/下載

    背景 Android開發中的網路框架經過多年的發展,目前比較主流的就是Retrofit了,Retrofit2版本出現也有幾年了,為了方便使用,特封裝了一些關於Retrofit2的程式碼,分享給大家。 框架主要包括: Get請求 Post請求 檔案上傳 檔案下載

    Android網路框架Retrofit的使用

    Retrofit2網路框架的使用 1.配置 api 'com.squareup.retrofit2:retrofit:2.1.0' api 'cohttp://blog.csdn.net/vipzjyno1/article/details/21039349/m.squareup.retrof

    教你寫Android網路框架之Request Response類與請求佇列

                    我正在參加部落格之星,點選這裡投我一票吧,謝謝~   前言在教你寫Android網路框架之基本架構一文中我們已經介紹了SimpleNet網路框架的基本結構,今天我們就開始從程式碼的角度來開始切入該網路框架的實現,在剖析的同時我們會分析設計思路,以及為什麼要這樣做,這樣做的好處是

    Android網路框架的選擇

    今年已經收是2018年了,Android P 預覽版已經推出來了。這裡只是想說明一下技術的更新太快了。 下面說正題,目前我們在Android中可選擇的網路框架主要有以下幾種: Volley OKhttp Retrofit 這三種,但是要說明一下: 首

    android網路框架Retrofit——簡介,使用的jar包

    簡介  Retrofit是github上,由square發起的開源專案,使用起來非常的簡介,可以通過非常簡單的註解方式來晚上網路訪問,而且具有靈活的配置,基本可以滿足我們的專案需求,可以在andorid專案的網路方面進行快速開發。 jar包 必須:          

    必須知道的Android網路框架大全!值得一看良心文章!

    導語    大通常在 Android 中進行網路連線一般使用 Scoket 和 HTTP兩種方式。而 HTTP 請求方式比 Scoket 多得多,HTTP 請求一般採用原生的 HttpClient 和 HttpUrlConnection 的兩種網路訪問方式。可是在 Andro

    Android網路框架:OKHttp原始碼簡單解析(一)

    這是第一次解析原始碼並把它寫出來,在之前,我一直以為只要會用別人的輪子就好,做出實際的效果就行,對看原始碼對自己的能力提升不以為然。後來偶然聽到一句話:看別人的DEMO,你就可以會用輪子,但是要想用好輪子,還是得看原始碼。我覺得看原始碼有兩個方面的好處: 1

    Android 網路框架_常用的網路框架

    看了張哥(stormzhang)的部落格之後,深有感觸,又讓我感慨了一番,而且發現張哥的部落格英文跟漢字之間是有空格的,數字跟漢字之間也有空格,看起來很舒服很美觀,張哥真的是把每一個細節都做的很好,所以身為草根開發者的我,也要學習。附上張哥部落格的一部分截圖:

    android網路框架Retrofit使用記錄

    Retrofit的GET請求: 情景:在新聞app中要獲取某個使用者收藏的文章資訊。 這個請求我們使用的是get請求,使用者的授權資訊放到請求的Headers中;其他引數比如offset-偏移起始位置,limit - 返回最多結果數等引數都放在 Linke

    Android 網路框架之Retrofit2使用詳解及從原始碼中解析原理

    就目前來說Retrofit2使用的已相當的廣泛,那麼我們先來了解下兩個問題: 1 . 什麼是Retrofit? Retrofit是針對於Android/Java的、基於okHttp的、一種輕量級且安全的、並使用註解方式的網路請求框架。 2 . 我們為什麼要