android Volley網(wǎng)絡(luò)請求框架使用

我們平時在開發(fā)Android應(yīng)用的時候不可避免地都需要用到網(wǎng)絡(luò)技術(shù)农猬,而多數(shù)情況下應(yīng)用程序都會使用HTTP協(xié)議來發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù)醒串。Android系統(tǒng)中主要提供了兩種方式來進行HTTP通信,HttpURLConnection和HttpClient,幾乎在任何項目的代碼中我們都能看到這兩個類的身影,使用率非常高。

不過HttpURLConnection和HttpClient的用法還是稍微有些復(fù)雜的胆筒,如果不進行適當封裝的話,很容易就會寫出不少重復(fù)代碼诈豌。于是乎仆救,一些Android網(wǎng)絡(luò)通信框架也就應(yīng)運而生,比如說AsyncHttpClient矫渔,它把HTTP所有的通信細節(jié)全部封裝在了內(nèi)部派桩,我們只需要簡單調(diào)用幾行代碼就可以完成通信操作了。再比如Universal-Image-Loader蚌斩,它使得在界面上顯示網(wǎng)絡(luò)圖片的操作變得極度簡單铆惑,開發(fā)者不用關(guān)心如何從網(wǎng)絡(luò)上獲取圖片范嘱,也不用關(guān)心開啟線程、回收圖片資源等細節(jié)员魏,Universal-Image-Loader已經(jīng)把一切都做好了丑蛤。

Android開發(fā)團隊也是意識到了有必要將HTTP的通信操作再進行簡單化,于是在2013年Google I/O大會上推出了一個新的網(wǎng)絡(luò)通信框架——Volley撕阎。Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優(yōu)點集于了一身受裹,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網(wǎng)絡(luò)上的圖片虏束。除了簡單易用之外棉饶,Volley在性能方面也進行了大幅度的調(diào)整,它的設(shè)計目標就是非常適合去進行數(shù)據(jù)量不大镇匀,但通信頻繁的網(wǎng)絡(luò)操作照藻,而對于大數(shù)據(jù)量的網(wǎng)絡(luò)操作,比如說下載文件等汗侵,Volley的表現(xiàn)就會非常糟糕幸缕。

get請求

private voidget(){

RequestQueue rq= Volley.newRequestQueue(getApplicationContext());

StringRequest有三個參數(shù) ?一個是請求地址 ?一個是強求成功調(diào)用的方法,一個是請求失敗調(diào)用的方法

StringRequest sr=new StringRequest(url, newResponse.Listener() {

@Override

public voidonResponse(String s) { ? ?textView.setText(s.toString()); ? }

}, newResponse.ErrorListener() {

@Override

public voidonErrorResponse(VolleyError volleyError) {}

});

rq.add(sr);

}


POST方法

RequestQueue rq= Volley.newRequestQueue(getApplicationContext());

StringRequest stringRequest =newStringRequest(Request.Method.POST,url, newResponse.Listener() {

@Override

public voidonResponse(String s) {

}

}, newResponse.ErrorListener() {

@Override

public voidonErrorResponse(VolleyError volleyError) {

}

}) {

@Override

protectedMapgetParams()throwsAuthFailureError {

Map map =newHashMap();

map.put("參數(shù)1","value1");

map.put("參數(shù)2","value2");

returnmap;

}

};

rq.add(stringRequest);

}

用Volley加載圖片晰韵,使用這么一個方法

private voidimage(){

RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

ImageRequest imageRequest =newImageRequest(

"http://img02.tooopen.com/images/20141231/sy_78327074576.jpg",

newResponse.Listener() {

@Override

public voidonResponse(Bitmap response) {

imageView.setImageBitmap(response);

}

},0,0,Bitmap.Config.ARGB_8888, newResponse.ErrorListener() {

@Override

public voidonErrorResponse(VolleyError error) {

imageView.setImageResource(R.mipmap.ic_launcher);

}

});

mQueue.add(imageRequest);

}

可以看到发乔,ImageRequest的構(gòu)造函數(shù)接收六個參數(shù),第一個參數(shù)就是圖片的URL地址雪猪,這個沒什么需要解釋的栏尚。第二個參數(shù)是圖片請求成功的回調(diào),這里我們把返回的Bitmap參數(shù)設(shè)置到ImageView中只恨。第三第四個參數(shù)分別用于指定允許圖片最大的寬度和高度译仗,如果指定的網(wǎng)絡(luò)圖片的寬度或高度大于這里的最大值,則會對圖片進行壓縮坤次,指定成0的話就表示不管圖片有多大,都不會進行壓縮斥赋。第五個參數(shù)用于指定圖片的顏色屬性缰猴,Bitmap.Config下的幾個常量都可以在這里使用,其中ARGB_8888可以展示最好的顏色屬性疤剑,這里可以設(shè)置為null滑绒,每個圖片像素占據(jù)4個字節(jié)的大小,而RGB_565則表示每個圖片像素占據(jù)2個字節(jié)大小隘膘。第六個參數(shù)是圖片請求失敗的回調(diào)疑故,這里我們當請求失敗時在ImageView中顯示一張默認圖片。

加載網(wǎng)絡(luò)圖片并緩存

寫一個ImageCache起到圖片緩存的作用

public classBitmapCacheimplementsImageLoader.ImageCache {

privateLruCachemCache;

publicBitmapCache() {

intmaxSize =10*1024*1024; ?//這個是緩存大小 ? ?10M

mCache=newLruCache(maxSize) {

@Override

protected intsizeOf(String key,Bitmap bitmap) {

returnbitmap.getRowBytes() * bitmap.getHeight();

}

};

}

@Override

publicBitmapgetBitmap(String url) {

returnmCache.get(url);

}

@Override

public voidputBitmap(String url,Bitmap bitmap) {

mCache.put(url,bitmap);

}

}

這樣我們就可以用這個類進行緩存圖片 ?接下來進行緩存

RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

ImageLoader imageLoader =newImageLoader(mQueue, newBitmapCache());

ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView,

R.mipmap.ic_launcher,R.mipmap.ic_launcher_round);

imageLoader.get("http://img02.tooopen.com/images/20141231/sy_78327074576.jpg",listener);

//imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener, 200, 200);


加載圖片參考

網(wǎng)絡(luò)請求加載參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弯菊,一起剝皮案震驚了整個濱河市纵势,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖钦铁,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件软舌,死亡現(xiàn)場離奇詭異,居然都是意外死亡牛曹,警方通過查閱死者的電腦和手機佛点,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黎比,“玉大人超营,你說我怎么就攤上這事≡某妫” “怎么了演闭?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長书妻。 經(jīng)常有香客問我船响,道長,這世上最難降的妖魔是什么躲履? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任见间,我火速辦了婚禮,結(jié)果婚禮上工猜,老公的妹妹穿的比我還像新娘米诉。我一直安慰自己,他們只是感情好篷帅,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布史侣。 她就那樣靜靜地躺著,像睡著了一般魏身。 火紅的嫁衣襯著肌膚如雪惊橱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天箭昵,我揣著相機與錄音税朴,去河邊找鬼。 笑死家制,一個胖子當著我的面吹牛正林,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颤殴,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼觅廓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涵但?” 一聲冷哼從身側(cè)響起杈绸,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤帖蔓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝇棉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讨阻,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年篡殷,在試婚紗的時候發(fā)現(xiàn)自己被綠了钝吮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡板辽,死狀恐怖奇瘦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劲弦,我是刑警寧澤耳标,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站邑跪,受9級特大地震影響次坡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜画畅,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一砸琅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轴踱,春花似錦症脂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雳灵,卻和暖如春棕所,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悯辙。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工琳省, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笑撞。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓岛啸,卻偏偏與公主長得像钓觉,于是被迫代替她去往敵國和親茴肥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容