久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日焦點 焦點資訊 營銷之道 企業報道 淘寶運營 網站建設 軟件開發 400電話
  當前位置: 首頁 » 資訊 » APP開發 » 正文

Android Volley完全解析(一),初識Volley的基本用法

放大字體  縮小字體 發布日期:2017-04-24  瀏覽次數:345  【去百度看看】
核心提示:1. Volley簡介我們平時在開發Android應用的時候不可避免地都需要用到網絡技術,而多數情況下應用程序都會使用HTTP協議來發送和接
 

1. Volley簡介

我們平時在開發Android應用的時候不可避免地都需要用到網絡技術,而多數情況下應用程序都會使用HTTP協議來發送和接收網絡數據。Android系統中主要提供了兩種方式來進行HTTP通信,HttpURLConnection和HttpClient,幾乎在任何項目的代碼中我們都能看到這兩個類的身影,使用率非常高。

不過HttpURLConnection和HttpClient的用法還是稍微有些復雜的,如果不進行適當封裝的話,很容易就會寫出不少重復代碼。于是乎,一些Android網絡通信框架也就應運而生,比如說AsyncHttpClient,它把HTTP所有的通信細節全部封裝在了內部,我們只需要簡單調用幾行代碼就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上顯示網絡圖片的操作變得極度簡單,開發者不用關心如何從網絡上獲取圖片,也不用關心開啟線程、回收圖片資源等細節,Universal-Image-Loader已經把一切都做好了。

Android開發團隊也是意識到了有必要將HTTP的通信操作再進行簡單化,于是在2013年Google I/O大會上推出了一個新的網絡通信框架——Volley。Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優點集于了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網絡上的圖片。除了簡單易用之外,Volley在性能方面也進行了大幅度的調整,它的設計目標就是非常適合去進行數據量不大,但通信頻繁的網絡操作,而對于大數據量的網絡操作,比如說下載文件等,Volley的表現就會非常糟糕。

下圖所示的這些應用都是屬于數據量不大,但網絡通信頻繁的,因此非常適合使用Volley。

2. 下載Volley

介紹了這么多理論的東西,下面我們就準備開始進行實戰了,首先需要將Volley的jar包準備好,如果你的電腦上裝有Git,可以使用如下命令下載Volley的源碼:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
 
  1. git clone https://android.googlesource.com/platform/frameworks/volley  

下載完成后將它導入到你的Eclipse工程里,然后再導出一個jar包就可以了。如果你的電腦上沒有Git,那么也可以直接使用我導出好的jar包,下載地址是:http://www.kwstu.com/ResourcesView/kwstu_201441183330928 。

 

新建一個Android項目,將volley.jar文件復制到libs目錄下,這樣準備工作就算是做好了。

3. StringRequest的用法

前面已經說過,Volley的用法非常簡單,那么我們就從最基本的HTTP通信開始學習吧,即發起一條HTTP請求,然后接收HTTP響應。首先需要獲取到一個RequestQueue對象,可以調用如下方法獲取到:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
 
  1. RequestQueue mQueue = Volley.newRequestQueue(context);  

注意這里拿到的RequestQueue是一個請求隊列對象,它可以緩存所有的HTTP請求,然后按照一定的算法并發地發出這些請求。RequestQueue內部的設計就是非常合適高并發的,因此我們不必為每一次HTTP請求都創建一個RequestQueue對象,這是非常浪費資源的,基本上在每一個需要和網絡交互的Activity中創建一個RequestQueue對象就足夠了。

 

接下來為了要發出一條HTTP請求,我們還需要創建一個StringRequest對象,如下所示:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
 
  1. StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
  2.                         new Response.Listener<String>() {  
  3.                             @Override  
  4.                             public void onResponse(String response) {  
  5.                                 Log.d("TAG", response);  
  6.                             }  
  7.                         }, new Response.ErrorListener() {  
  8.                             @Override  
  9.                             public void onErrorResponse(VolleyError error) {  
  10.                                 Log.e("TAG", error.getMessage(), error);  
  11.                             }  
  12.                         });  

可以看到,這里new出了一個StringRequest對象,StringRequest的構造函數需要傳入三個參數,第一個參數就是目標服務器的URL地址,第二個參數是服務器響應成功的回調,第三個參數是服務器響應失敗的回調。其中,目標服務器地址我們填寫的是百度的首頁,然后在響應成功的回調里打印出服務器返回的內容,在響應失敗的回調里打印出失敗的詳細信息。

 

最后,將這個StringRequest對象添加到RequestQueue里面就可以了,如下所示:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
 
  1. mQueue.add(stringRequest);  

另外,由于Volley是要訪問網絡的,因此不要忘記在你的AndroidManifest.xml中添加如下權限:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
 
  1. <uses-permission android:name="android.permission.INTERNET" />  

 

好了,就是這么簡單,如果你現在運行一下程序,并發出這樣一條HTTP請求,就會看到LogCat中會打印出如下圖所示的數據。

 

沒錯,百度返回給我們的就是這樣一長串的HTML代碼,雖然我們看起來會有些吃力,但是瀏覽器卻可以輕松地對這段HTML代碼進行解析,然后將百度的首頁展現出來。

這樣的話,一個最基本的HTTP發送與響應的功能就完成了。你會發現根本還沒寫幾行代碼就輕易實現了這個功能,主要就是進行了以下三步操作:

1. 創建一個RequestQueue對象。

2. 創建一個StringRequest對象。

3. 將StringRequest對象添加到RequestQueue里面。

不過大家都知道,HTTP的請求類型通常有兩種,GET和POST,剛才我們使用的明顯是一個GET請求,那么如果想要發出一條POST請求應該怎么做呢?StringRequest中還提供了另外一種四個參數的構造函數,其中第一個參數就是指定請求類型的,我們可以使用如下方式進行指定:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
 
  1. StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener);  

 

 
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規舉報 ]  [ 關閉窗口 ]

 
0條 [查看全部]  相關評論

 
網站首頁 | 關于我們 | 聯系方式 | 使用協議 | 版權隱私 | 網站地圖 | 排名推廣 | 廣告服務 | 積分換禮 | 網站留言 | RSS訂閱 | 吉ICP備19006030號-4
企業800網 · 提供技術支持