Android - 網(wǎng)絡(luò)請(qǐng)求之Volley

老婆保佑爪喘,代碼無BUG

目錄

  • 引入
  • 使用
    • 文字信息處理
      • get請(qǐng)求
      • post請(qǐng)求
    • 圖片下載
  • 封裝Volley

一. 引入

GitHub 首頁

compile 'com.mcxiaoke.volley:library:1.0.19'

二.使用

1.文字信息處理

  • 發(fā)送StringRequest請(qǐng)求(掌握)

GET


public void btn(View view) {
    
   RequestQueue  queue = Volley.newRequestQueue(this);
    
    String url = "http://apis.juhe.cn/mobile/get?phone=18856907654&key=5778e9d9cf089fc3b093b162036fc0e1";
//  一柠衅,創(chuàng)建請(qǐng)求隊(duì)列對(duì)象簇捍,通常情況下,一個(gè)類中(或者說一個(gè)工程中)保持 始終使用同一個(gè)RequestQueue對(duì)象即可

        /**
         * 1. int 類型 用于指定請(qǐng)求的方式(如GET或者POST)
         * 2. String類型 用于指定網(wǎng)絡(luò)請(qǐng)求要連接的網(wǎng)址
         * 3. Listener類型 ,接收網(wǎng)絡(luò)響應(yīng)的接口稳摄,即只要得到本次請(qǐng)求對(duì)應(yīng)的返回結(jié)果
         * 就會(huì)運(yùn)行此接口中的onResponse方法
         * 4: ErrorListener類型, 用于接收當(dāng)網(wǎng)絡(luò)請(qǐng)求的過程中一旦發(fā)生了什么錯(cuò)誤,
         * 就會(huì)調(diào)用本接口中的onErrorResponse方法
         * */
         StringRequest stringRequest = new StringRequest(StringRequest.Method.GET,url, new Response.Listener<String>() { Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Logger.e("response-->" + response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Logger.e("response-->" + error.getMessage());
            }
        });

        //三砰琢,給請(qǐng)求對(duì)象設(shè)置tag標(biāo)識(shí)
        stringRequest.setTag("get");
        //四,將請(qǐng)求添加到請(qǐng)求隊(duì)列中良瞧,執(zhí)行網(wǎng)絡(luò)請(qǐng)求
        queue.add(stringRequest);
    }

返回結(jié)果

11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ Thread: main
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ MainActivity$1.onResponse  (MainActivity.java:41)
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │    MainActivity$1.onResponse  (MainActivity.java:44)
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: │ response-->{"resultcode":"200","reason":"Return Successd!","result":{"province":"安徽","city":"合肥","areacode":"0551","zip":"230000","company":"移動(dòng)","card":""},"error_code":0}
11-27 06:38:46.464 4397-4397/com.allens.volleydemo E/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────

POST請(qǐng)求


public void btn(View view) {
        RequestQueue  queue = Volley.newRequestQueue(this);
        String postUrl = "http://apis.juhe.cn/mobile/get";

        StringRequest stringRequest = new StringRequest(StringRequest.Method.POST, postUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Logger.e("response-->" + response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Logger.e("response-->" + error.getMessage());
            }
        }) {
            /**
             * Post請(qǐng)求和Get請(qǐng)求的使用步驟上的區(qū)別在于請(qǐng)求條件的指定
             * 必須在StringRequest對(duì)象的后面添加{}陪汽,并且
             * 在{}內(nèi)重寫getParams方法,該方法的返回值就是所有的請(qǐng)求條件
             * */
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //將請(qǐng)求條件封裝到map對(duì)象中
                Map<String, String> map = new HashMap<>();
                map.put("phone", "18856907654");
                map.put("key", "5778e9d9cf089fc3b093b162036fc0e1");
                return map;
            }
        };

        //三褥蚯,給請(qǐng)求對(duì)象設(shè)置tag標(biāo)識(shí)
        stringRequest.setTag("get");
        //四挚冤,將請(qǐng)求添加到請(qǐng)求隊(duì)列中,執(zhí)行網(wǎng)絡(luò)請(qǐng)求
        queue.add(stringRequest);
    }


  • 發(fā)送JsonObjectRequest請(qǐng)求(了解)

區(qū)別于StringRequest赞庶,特點(diǎn)在于:請(qǐng)求的結(jié)果直接被定義為一個(gè)JsonObject類型


2. 圖片下載

  • 單張圖片下載
  public void btn(View view) {
        queue = Volley.newRequestQueue(this);
        ImageRequest imageRequest = new ImageRequest(
                "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2019270811,1269730008&fm=27&gp=0.jpg", //對(duì)應(yīng)圖片的下載地址
                new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap response) {
                        Logger.e("response---->" + response);
                    }
                }, 200, 200,// 指定下載后圖片的最大寬高
                ImageView.ScaleType.FIT_XY,//指定圖片的縮放模式
                Bitmap.Config.ARGB_8888,//指定圖片的編碼格式
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Logger.e("error--->" + error);
                    }
                });
        queue.add(imageRequest);
    }
  • 多張圖片下載

定義ImageCache

package com.allens.volleydemo;

import android.graphics.Bitmap;
import android.util.LruCache;

import com.android.volley.toolbox.ImageLoader;

/**
 * .分配一定內(nèi)存空間训挡,專門存取圖片,一般為內(nèi)存大小的1/8
 * Created by allens on 2017/11/28.
 */

public class MyImageCache implements ImageLoader.ImageCache {

    private LruCache<String, Bitmap> mCache;

    public MyImageCache() {
        //分配最大內(nèi)存空間的1/8
        long maxMemory = Runtime.getRuntime().maxMemory() / 8;
        mCache = new LruCache<String, Bitmap>((int) maxMemory) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //得到當(dāng)前圖片的大小
                return value.getByteCount();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String url) {
        return mCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        if (getBitmap(url) == null)
            mCache.put(url, bitmap);
    }

}

  • 使用 ImageLoader
  ImageLoader loader = new ImageLoader(queue, new MyImageCache());
        loader.get("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2019270811,1269730008&fm=27&gp=0.jpg", //圖片的下載路徑
                //通過getImageListener方法獲取ImageListener接口對(duì)象
                /*
                * 參數(shù)1: 圖片下載完成后歧强,由哪個(gè)控件顯示圖片
                * 參數(shù)2:設(shè)置圖片下載過程中顯示的默認(rèn)圖片
                * 參數(shù)3: 設(shè)置一旦圖片下載出錯(cuò)澜薄,就顯示出錯(cuò)提示圖片
                * */
                ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
                , 200, 200, //圖片的最大寬高
                ImageView.ScaleType.FIT_XY //圖片的縮放模式
        )

三.封裝

快醒醒

封裝地址 點(diǎn)擊查看


參考

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

Android Volley完全解析(二)摊册,使用Volley加載網(wǎng)絡(luò)圖片

Android Volley完全解析(三)肤京,定制自己的Request

Android Volley完全解析(四),帶你從源碼的角度理解Volley

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茅特,一起剝皮案震驚了整個(gè)濱河市蟆沫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌温治,老刑警劉巖饭庞,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熬荆,居然都是意外死亡舟山,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門卤恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來累盗,“玉大人,你說我怎么就攤上這事突琳∪粽” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵拆融,是天一觀的道長(zhǎng)蠢琳。 經(jīng)常有香客問我啊终,道長(zhǎng),這世上最難降的妖魔是什么傲须? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任蓝牲,我火速辦了婚禮,結(jié)果婚禮上泰讽,老公的妹妹穿的比我還像新娘例衍。我一直安慰自己,他們只是感情好已卸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布佛玄。 她就那樣靜靜地躺著,像睡著了一般累澡。 火紅的嫁衣襯著肌膚如雪翎嫡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天永乌,我揣著相機(jī)與錄音惑申,去河邊找鬼。 笑死翅雏,一個(gè)胖子當(dāng)著我的面吹牛圈驼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播望几,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼绩脆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了橄抹?” 一聲冷哼從身側(cè)響起靴迫,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎楼誓,沒想到半個(gè)月后玉锌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疟羹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年主守,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榄融。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡参淫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愧杯,到底是詐尸還是另有隱情涎才,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布力九,位于F島的核電站耍铜,受9級(jí)特大地震影響邑闺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜业扒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一检吆、第九天 我趴在偏房一處隱蔽的房頂上張望舒萎。 院中可真熱鬧程储,春花似錦、人聲如沸臂寝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咆贬。三九已至败徊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掏缎,已是汗流浹背皱蹦。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眷蜈,地道東北人沪哺。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像酌儒,于是被迫代替她去往敵國(guó)和親辜妓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359