1. 程式人生 > >Android 網路通訊框架Volley完全解析(一)

Android 網路通訊框架Volley完全解析(一)

Volley簡介及Request基本用法

 Google I/O 2013上,Volley釋出了。Volley是Android平臺上的網路通訊庫,能使網路通訊更快,更簡單,更健壯。這是Volley名稱的由來: a burst or emission of many things or a large amount at once,volley適合資料量小,通訊頻繁的網路操作,而對於大資料量的網路操作,比如說下載檔案等,Volley的表現就會非常糟糕。

1. Volley的工作流程圖,如下圖所示。


2.volley包含的功能

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


3.StringRequest的用法

 前面已經說過,Volley的用法非常簡單,那麼我們就從最基本的HTTP通訊開始學習吧,即發起一條HTTP請求,然後接收HTTP響應。首先需要獲取到一個RequestQueue物件,可以呼叫如下方法獲取到:
       RequestQueue mQueue = Volley.newRequestQueue(context); 
     注意這裡拿到的RequestQueue是一個請求佇列物件,它可以快取所有的HTTP請求,然後按照一定的演算法併發地發出這些請求。RequestQueue內部的設計就是非常合適高併發的,因此我們不必為每一次HTTP請求都建立一個RequestQueue物件,這是非常浪費資源的,基本上在每一個需要和網路互動的Activity中建立一個RequestQueue物件就足夠了。      接下來為了要發出一條HTTP請求,我們還需要建立一個StringRequest物件,如下所示:
       StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
                        new Response.Listener<String>() {  
                            @Override  
                            public void onResponse(String response) {  
                                Log.d("TAG", response);  
                            }  
                        }, new Response.ErrorListener() {  
                            @Override  
                            public void onErrorResponse(VolleyError error) {  
                                Log.e("TAG", error.getMessage(), error);  
                            }  
                        });  
     可以看到,這裡new出了一個StringRequest物件,StringRequest的建構函式需要傳入三個引數,第一個引數就是目標伺服器的URL地址,第二個引數是伺服器響應成功的回撥,第三個引數是伺服器響應失敗的回撥。其中,目標伺服器地址我們填寫的是百度的首頁,然後在響應成功的回撥裡打印出伺服器返回的內容,在響應失敗的回撥裡打印出失敗的詳細資訊。     最後,將這個StringRequest物件新增到RequestQueue裡面就可以了,如下所示:
                     mQueue.add(stringRequest);  
一個最基本的HTTP傳送與響應的功能就完成了。你會發現根本還沒寫幾行程式碼就輕易實現了這個功能,主要就是進行了以下三步操作:
1. 建立一個RequestQueue物件。
2. 建立一個StringRequest物件。
3. 將StringRequest物件新增到RequestQueue裡面。
        大家都知道,HTTP的請求型別通常有兩種,GET和POST,剛才我們使用的明顯是一個GET請求,那麼如果想要發出一條POST請求應該怎麼做呢?StringRequest中還提供了另外一種四個引數的建構函式,其中第一個引數就是指定請求型別的,我們可以使用如下方式進行指定:
      StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener);  
             可是這只是指定了HTTP請求方式是POST,那麼我們要提交給伺服器的引數又該怎麼設定呢?很遺憾,StringRequest中並沒有提供設定POST引數的方法,但是當發出POST請求的時候,Volley會嘗試呼叫StringRequest的父類——Request中的getParams()方法來獲取POST引數,那麼解決方法自然也就有了,我們只需要在StringRequest的匿名類中重寫getParams()方法,在這裡設定POST引數就可以了,程式碼如下所示:
    StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {  
    @Override  
    protected Map<String, String> getParams() throws AuthFailureError {  
        Map<String, String> map = new HashMap<String, String>();  
        map.put("params1", "value1");  
        map.put("params2", "value2");  
        return map;  
    }  
};  

4. JsonRequest的用法

        學完了最基本的StringRequest的用法,我們再來進階學習一下JsonRequest的用法。類似於StringRequest,JsonRequest也是繼承自Request類的,不過由於JsonRequest是一個抽象類,因此我們無法直接建立它的例項,那麼只能從它的子類入手了。JsonRequest有兩個直接的子類,JsonObjectRequest和JsonArrayRequest,從名字上你應該能就看出它們的區別了吧?一個是用於請求一段JSON資料的,一個是用於請求一段JSON陣列的。至於它們的用法也基本上沒有什麼特殊之處,先new出一個JsonObjectRequest物件,如下所示:
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,  
        new Response.Listener<JSONObject>() {  
            @Override  
            public void onResponse(JSONObject response) {  
                Log.d("TAG", response.toString());  
            }  
        }, new Response.ErrorListener() {  
            @Override  
            public void onErrorResponse(VolleyError error) {  
                Log.e("TAG", error.getMessage(), error);  
            }  
        });  

      響應的資料就是以JSON格式返回的,然後我們在onResponse()方法中將返回的資料打印出來。最後再將這個JsonObjectRequest物件新增到RequestQueue裡就可以了,如下所示:
                mQueue.add(jsonObjectRequest);  
     你應該發現了吧,JsonObjectRequest的用法和StringRequest的用法基本上是完全一樣的,Volley的易用之處也在這裡體現出來了,會了一種就可以讓你舉一反三,因此關於JsonArrayRequest的用法相信已經不需要我再去講解了吧。

相關推薦

Android 網路通訊框架Volley完全解析

Volley簡介及Request基本用法  Google I/O 2013上,Volley釋出了。Volley是Android平臺上的網路通訊庫,能使網路通訊更快,更簡單,更健壯。這是Volley名

Android圖片載入框架最全解析,Glide的基本用法

現在Android上的圖片載入框架非常成熟,從最早的老牌圖片載入框架UniversalImageLoader,到後來Google推出的Volley,再到後來的新興軍Glide和Picasso,當然還有Facebook的Fresco。每一個都非常穩定,功能也都十分強大。但是它們

Android圖片載入框架最全解析Glide的基本用法

現在Android上的圖片載入框架非常成熟,從最早的老牌圖片載入框架UniversalImageLoader,到後來Google推出的Volley,再到後來的新興軍Glide和Picasso,當然還有Facebook的Fresco。每一個都非常穩定,功能也都

郭霖Android圖片載入框架最全解析,Glide的基本用法

本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每天都有文章更新。 現在Android上的圖片載入框架非常成熟,從最早的老牌圖片載入框架UniversalImageLoader,到後來Google推出的Volley,再到後來的新興軍Glide和Picas

Android 開源框架Universal-Image-Loader完全解析--- 基本介紹及使用

                大家好!差不多兩個來月沒有寫文章了,前段時間也是在忙換工作的事,準備筆試面試什麼的事情,現在新工作找好了,新工作自己也比較滿意,唯一遺憾的就是自己要去一個新的城市,新的環境新的開始,希望自己能儘快的適應新環境,現在在準備交接的事情,自己也有一些時間了,所以就繼續給大家分享And

Android 網路通訊框架Volley簡介(Google IO 2013)

1. 什麼是Volley在這之前,我們在程式中需要和網路通訊的時候,大體使用的東西莫過於AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley釋出了。

Android網路通訊框架Volley

比如,螢幕旋轉的時候,有時候會導致再次從網路取得資料。為了避免這種不必要的網路訪問,我們可能需要自己寫很多針對各種情況的處理,比如cache什麼的。   再有,比如ListView的時候,我們滾動過快,可能導致有些網路

Android圖片載入框架最全解析,玩轉Glide的回撥與監聽筆記

參考原文:Android圖片載入框架最全解析(四),玩轉Glide的回撥與監聽 回撥的原始碼實現 的Target物件傳入到GenericRequest當中,而Glide在圖片載入完成之後又會回撥GenericRequest的onResourceReady()方法,onReso

Android圖片載入框架最全解析,Glide強大的圖片變換功能筆記

參考原文:Android圖片載入框架最全解析(五),Glide強大的圖片變換功能 一個問題 百度這張logo圖片的尺寸只有540258畫素,但是我的手機的解析度卻是10801920畫素,而我們將ImageView的寬高設定的都是wrap_content,那麼圖片的寬度應該只有

Android圖片載入框架最全解析,深入探究Glide的快取機制(筆記)

原文地址:Android圖片載入框架最全解析(三),深入探究Glide的快取機制 筆記: 1.Glide快取簡介 2.快取Key EngineKey 重寫了equals()和hashCode()方法,保證只有傳入EngineKey的所有引數都相同的情況下才認為是

Android圖片載入框架最全解析,實現帶進度的Glide圖片載入功能筆記

參考原文:Android圖片載入框架最全解析(七),實現帶進度的Glide圖片載入功能 擴充套件目標 對Glide進行功能擴充套件,使其支援監聽圖片下載進度的功能 開始 dependencies { compile 'com.github.bumptech.glid

Android圖片載入框架最全解析,探究Glide的自定義模組功能(筆記)

參考原文:Android圖片載入框架最全解析(六),探究Glide的自定義模組功能 自定義模組的基本用法 自定義模組功能可以將更改Glide配置,替換Glide元件等操作獨立出來,使得我們能輕鬆地對Glide的各種配置進行自定義,並且又和Glide的圖片載入邏輯沒有任何交集,

Android圖片載入框架最全解析,Glide強大的圖片變換功能

                       本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每天都有文章更新。大家好,又到了學習Glide的時間了。前段時間由於專案開發緊張,再加上後來又生病了,所以停更了一個月,不過現在終於又可以恢復正常更新了。今天是這個系列的第五篇文章,

Android圖片載入框架最全解析,帶你全面瞭解Glide 4的用法

本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每天都有文章更新。 本篇將是我們這個Glide系列的最後一篇文章。 其實在寫這個系列第一篇文章的時候,Glide就推出4.0.0的RC版了。那個時候因為我一直研究的

Android圖片載入框架最全解析,實現帶進度的Glide圖片載入功能

本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每天都有文章更新。 我們的Glide系列文章終於要進入收尾篇了。從我開始寫這個系列的第一篇文章時,我就知道這會是一個很長的系列,只是沒有想到竟然會寫這麼久。 在前面

Android圖片載入框架最全解析,玩轉Glide的回撥與監聽

本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每天都有文章更新。 大家好,今天我們繼續學習Glide。 在上一篇文章當中,我帶著大家一起深入探究了Glide的快取機制,我們不光掌握了Glide快取的使用方法,還

Android硬編解碼介面MediaCodec使用完全解析

由於4月初要離職了,在找新工作,發現很多企業的招聘資訊都有“附上自己的技術部落格可以加分”類似的說明,正好最後的這段時間會比較閒,所以打算整理一下以前記錄的一些筆記發上來,也算是回顧一下。由於這些筆記或多或少的參考了其他資料,所以本人不擁有其版權,可以隨便

Android四大元件之Service全面解析

 在小杰的上一篇博文中給大家講了一下Android四大元件之一的Activity,也是最重要的,這一篇文章,給大家講一下Service。 什麼是Service  Service是Android的四大元件之一應用廣泛,它是一個能在後臺進行一個長時間的操作並且不提供使用者介面

Glide完全解析初步使用完全教程教程

一、背景 現在Android上的圖片載入框架非常成熟,從最早的老牌圖片載入框架UniversalImageLoader,到後來Google推出的Volley,再到後來的新興軍Glide和Picasso,當然還有Facebook的Fresco。每一個都非常穩