天天看點

Android架構Volley

1.volley架構使用基本上一樣的順序(三步走):(不需要考了建立新線程的問題)

通路網絡别忘了添權重限:<uses-permission android:name="android.permission.internet"/>

<b>(1).建立</b>:requestqueue requestqueue= volley.newrequestqueue(this);

<b>(2.1.1)當使用stringrequest時  </b>

stringrequest stringrequest=new stringrequest(url,new response.listener(){},new response.errorlistener(){}){

public map&lt;string, string&gt; getheaders() throws authfailureerror {

hashmap map=new hashmap();

    map.put("apikey ","你自己的apikey");

    return map;

}

};

當用于接收json資料時,在url出寫接口(如:

http://apis.baidu.com/heweather/weather/free ? city=beijing)

通過getheaders()函數傳入apikey

在listener 的 onresponse()函數中得到jsonstring 的值。

<b>(2.1.2)也可以通過 getparams()對json的api參數值進行設定這時url的值就變了,并且參數多的第一個是請求方式:</b>

<b></b>

stringrequest stringrequest=new stringrequest(url,new 

response.listener(){},new response.errorlistener(){}){

protected map&lt;string, string&gt; getparams() throws authfailureerror {

    map.put("city","beijing"); //對應的apistore的參數是什麼就寫什麼

<b>(注意:getheaders 、getparams()函數都是寫在新代碼區)</b>

<b>(2.2)jsonrequest的使用(兩個直接子類:jsonobjectrequest和jsonarrayrequest)</b>

jsonobjectrequest jsonobjectrequest=new jsonobjectrequest("http://apis.baidu.com/heweather/weather/free?city=beijing", new response.listener&lt;jsonobject&gt;() {},new response.errorlistener(){}){

    map.put("apikey ","af02a3e0e93ef6cbb85eada01a1c40ae");

};

<b>(在response.listener的onresponse()方法裡通過textview2.settext(jsonobject.tostring()); 得到jsonstring)</b>

<b>在onerrorresponse中通過volleyerror.getmessage()的到錯誤提示)</b>

//使用jsonobjectrequest 需要注意:

/*使用jsonobjectrequest或繼承自jsonobjectrequest類的對象送出post請求時,

如果有參數需要送出時必須一jsonobject的json串方式送出,否則通過getparams()方法的方式送出不管用

*/

<b>(2.3)加載網絡圖檔</b>

<b>//第一個url圖檔的網址   第二個listener  第三第四為最大寬和高,第五為圖檔品質config.argb_8888四個位元組,argb_565 argb_4444兩個位元組  第六個errorlistener</b>

 imagerequest imagerequest=new imagerequest("https://p.ssl.qhimg.com/t01df31145427f5ea2f.jpg", new response.listener&lt;bitmap&gt;() {

@override

    public void onresponse(bitmap bitmap) {

imageview.setimagebitmap(bitmap);

    }

}, 0, 0, bitmap.config.argb_8888, new response.errorlistener() {

    public void onerrorresponse(volleyerror volleyerror) {

});

<b>(3)添加到 requestqueue中</b>

 requestqueue.add(imagerequest);

// requestqueue.add(jsonobjectrequest);

// requestqueue.add(stringrequest);

二.volley還提供了 networkimageview控件加載網絡圖檔(四步走)

1.首先在布局檔案中建立networkimageview

(含有 void類型的setimageurl()、string getimageurl()(得到傳入的url) 、void setdefaulimageid()(設定預設圖檔) 、seterrorimageid()(設定當網絡加載失敗時顯示的圖檔) 等函數)

<b>1.建立requestqueue對象</b>

<b>2.建立一個imageloader</b>

<b>3.在布局檔案中添加一個networkimageview控件</b>

<b>4.設定加載圖檔的網絡位址和imageloader</b>

代碼示範:

//首先定義出imageloader

imageloader imageloader=new imageloader(requestqueue, new imageloader.imagecache() {

    public bitmap getbitmap(string s) {

return null;

    public void putbitmap(string s, bitmap bitmap) {

networkimageview.setdefaultimageresid(r.mipmap.ic_launcher);

networkimageview.seterrorimageresid(r.mipmap.ic_launcher);//加載失敗顯示圖檔

networkimageview.setimageurl("https://p.ssl.qhimg.com/t01df31145427f5ea2f.jpg",imageloader);

三.自定義request

(用gson解析資料)

參考項目: https://github.com/linyuanbin/volley_kaiyuan