網(wǎng)絡(luò)編程(三)

Volley用法完全解析


Volley架構(gòu)圖

從上圖可以看到Volley分為三個(gè)線程柄瑰,分別是主線程闸氮、緩存調(diào)度線程、和網(wǎng)絡(luò)調(diào)度線程教沾,首先請(qǐng)求會(huì)加入緩存隊(duì)列蒲跨,如果發(fā)現(xiàn)可以找到相應(yīng)的緩存結(jié)果就直接讀取緩存并解析,然后回調(diào)給主線程授翻;如果在緩存中沒(méi)有找到結(jié)果隆箩,則將這條請(qǐng)求加入到網(wǎng)絡(luò)隊(duì)列中杨蛋,然后發(fā)送HTTP請(qǐng)求,解析響應(yīng)并寫(xiě)入緩存寇荧,并回調(diào)給主線程。

Volley簡(jiǎn)介:

2013年Google I/O大會(huì)上推出了一個(gè)新的網(wǎng)絡(luò)通信框架Volley。Volley既可以訪問(wèn)網(wǎng)絡(luò)取得數(shù)據(jù)烁设,也可以加載圖片,并且在性能方面也進(jìn)行了大幅度的調(diào)整恋谭,它的設(shè)計(jì)目標(biāo)就是非常適合去進(jìn)行數(shù)據(jù)量不大滞谢,但通信頻繁的網(wǎng)絡(luò)操作母截,而對(duì)于大數(shù)據(jù)量的網(wǎng)絡(luò)操作喘漏,比如說(shuō)下載文件等,Volley的表現(xiàn)就會(huì)非常糟糕。

Volley用法:

Volley請(qǐng)求網(wǎng)絡(luò)都是基于請(qǐng)求隊(duì)列的返十,開(kāi)發(fā)者只要把請(qǐng)求放在請(qǐng)求隊(duì)列中就可以了,請(qǐng)求隊(duì)列會(huì)依次進(jìn)行請(qǐng)求,一般情況下逢慌,一個(gè)應(yīng)用程序如果網(wǎng)絡(luò)請(qǐng)求沒(méi)有特別頻繁則完全可以只有一個(gè)請(qǐng)求隊(duì)列(對(duì)應(yīng)Application)鉴象,如果非常多或其他情況纺弊,則可以是一個(gè)Activity對(duì)應(yīng)一個(gè)網(wǎng)絡(luò)請(qǐng)求隊(duì)列,這就要看具體情況了

1.首先創(chuàng)建隊(duì)列:

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

2.StringRequest的用法:

//創(chuàng)建請(qǐng)求隊(duì)列 ? ? ?

?RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());? ? ? ? StringRequest mStringRequest = new StringRequest(Request.Method.GET, "http://www.baidu.com", ? ?new Response.Listener() {

@Override

public void onResponse(String response) {

Log.i("wangshu", response);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Log.e("wangshu", error.getMessage(), error);

}

});

//將請(qǐng)求添加在請(qǐng)求隊(duì)列中

mQueue.add(mStringRequest);

請(qǐng)求的結(jié)果是百度的網(wǎng)頁(yè)文件腊脱。

3.JsonRequest的用法:

RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());? ? ? ? JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest(Request.Method.POST,"http://api.1-blog.com/biz/bizserver/article/list.do",? ? ? ? ? ? ? ? new Response.Listener() {

@Override

public void onResponse(JSONObject response) {

Log.d("buxq", response.toString());

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Log.e("buxq", error.getMessage(), error);

}

}

);

mQueue.add(mJsonObjectRequest);

運(yùn)行程序返回的是一堆新聞的Json數(shù)據(jù),解析的話可以用Gson杜耙,這里不介紹了浆兰。

4.使用ImageRequest加載圖片:

RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());? ? ? ? ImageRequest imageRequest = new ImageRequest(? ? ? ? ? ? ? ? "http://img.my.csdn.net/uploads/201603/26/1458988468_5804.jpg",? ? ? ? ? ? ? ? new Response.Listener() {

@Override

public void onResponse(Bitmap response) {

iv_image.setImageBitmap(response);

}

}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

iv_image.setImageResource(R.drawable.ico_default);

}

});

mQueue.add(imageRequest);

請(qǐng)求圖片是可以設(shè)置期望的圖片大小的蜕便,如果圖片超過(guò)預(yù)期尺寸,會(huì)壓縮完再返回。

5.配合ImageLoader加載圖片:

ImageLoader的內(nèi)部使用ImageRequest來(lái)實(shí)現(xiàn)仿荆,它的構(gòu)造器可以傳入一個(gè)ImageCache緩存形參舶替,實(shí)現(xiàn)了圖片緩存的功能舔庶,同時(shí)還可以過(guò)濾重復(fù)鏈接惕橙,避免重復(fù)發(fā)送請(qǐng)求惶凝。

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

ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());

ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv_image,R.drawable.ico_default, R.drawable.ico_default);

imageLoader.get("http://img.my.csdn.net/uploads/201603/26/1458988468_5804.jpg", listener);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末混滔,一起剝皮案震驚了整個(gè)濱河市洒疚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坯屿,老刑警劉巖油湖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吠昭,死亡現(xiàn)場(chǎng)離奇詭異喊括,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蒲肋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門熟吏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)距糖,“玉大人悍引,你說(shuō)我怎么就攤上這事趣斤。” “怎么了漫仆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵没隘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我宪潮,道長(zhǎng)溯警,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任狡相,我火速辦了婚禮梯轻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尽棕。我一直安慰自己喳挑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著伊诵,像睡著了一般单绑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上日戈,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天询张,我揣著相機(jī)與錄音,去河邊找鬼浙炼。 笑死份氧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弯屈。 我是一名探鬼主播蜗帜,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼资厉!你這毒婦竟也來(lái)了厅缺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宴偿,失蹤者是張志新(化名)和其女友劉穎湘捎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窄刘,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窥妇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娩践。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片活翩。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翻伺,靈堂內(nèi)的尸體忽然破棺而出材泄,到底是詐尸還是另有隱情,我是刑警寧澤吨岭,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布拉宗,位于F島的核電站,受9級(jí)特大地震影響未妹,放射性物質(zhì)發(fā)生泄漏簿废。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一络它、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歪赢,春花似錦化戳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扫尖。三九已至,卻和暖如春掠廓,著一層夾襖步出監(jiān)牢的瞬間换怖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工蟀瞧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沉颂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓悦污,卻偏偏與公主長(zhǎng)得像铸屉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子切端,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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