国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android的HTTP操作庫Volley的基本使用教程

2019-12-12 06:25:54
字體:
供稿:網(wǎng)友

以前原本都用android內(nèi)建的Library來進(jìn)行GET、POST等等對(duì)API的連線與操作。
但最近想說來找找看有沒有好用的library,應(yīng)該可以事半功倍。
當(dāng)初有找了三套比較多人用的
1.Android Asynchronous Http Client
2.okhttp
square開發(fā)并且開源的,因?yàn)橹坝眠^他們家的picasso,所以對(duì)這套滿有好感的,只可惜使用方式不太喜歡
3.Volley
Volley是Google在2013年Google I/O的時(shí)候發(fā)布的,到現(xiàn)在已經(jīng)積累了很高的人氣。
Volley的GitHub項(xiàng)目地址:https://github.com/mcxiaoke/android-volley

創(chuàng)建Json請(qǐng)求
volley自帶了JsonObjectRequest和JsonArrayRequest分別來處理Json對(duì)象請(qǐng)求和Json數(shù)據(jù)請(qǐng)求(但是voley沒有使用gson庫寫一個(gè)GsonRequest,發(fā)送一個(gè)request,volley直接返回一個(gè)java對(duì)象,不過我們可以自己寫)。
創(chuàng)建json object請(qǐng)求。
發(fā)送一個(gè)請(qǐng)求只要這么簡單,創(chuàng)建一個(gè)JsonRequest對(duì)象,寫好response回調(diào)接口,并把這個(gè)請(qǐng)求放到請(qǐng)求隊(duì)列中就可以了。JsonArrayRequest也類似。

// Tag used to cancel the requestString tag_json_obj = "json_obj_req";String url = "http://api.androidhive.info/volley/person_object.json";JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,url, null,      new Response.Listener<JSONObject>() {        @Override        public void onResponse(JSONObject response) {          Log.d(TAG, response.toString());        }      }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError error) {          VolleyLog.d(TAG, "Error: " + error.getMessage());        }      });// Adding request to request queueAppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

創(chuàng)建String請(qǐng)求
StringRequest可以用來請(qǐng)求任何string類型的數(shù)據(jù):json,xml,文本等等。

// Tag used to cancel the requestString tag_string_req = "string_req";String url = "http://api.androidhive.info/volley/string_response.html";ProgressDialog pDialog = new ProgressDialog(this);pDialog.setMessage("Loading...");pDialog.show();   StringRequest strReq = new StringRequest(Method.GET,      url, new Response.Listener<String>() {        @Override        public void onResponse(String response) {          Log.d(TAG, response.toString());          pDialog.hide();        }      }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError error) {          VolleyLog.d(TAG, "Error: " + error.getMessage());          pDialog.hide();        }      });// Adding request to request queueAppController.getInstance().addToRequestQueue(strReq, tag_string_req);

創(chuàng)建POST請(qǐng)求
上面說的都是GET請(qǐng)求,下面來說一下POST請(qǐng)求,與GET請(qǐng)求不同的是,只要在創(chuàng)建請(qǐng)求的時(shí)候?qū)⒄?qǐng)求類型改為POST請(qǐng)求,并且override Request的getParams方法即可。

// Tag used to cancel the requestString tag_json_obj = "json_obj_req";String url = "http://api.androidhive.info/volley/person_object.json";ProgressDialog pDialog = new ProgressDialog(this);pDialog.setMessage("Loading...");pDialog.show();     JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,      url, null,      new Response.Listener<JSONObject>() {        @Override        public void onResponse(JSONObject response) {          Log.d(TAG, response.toString());          pDialog.hide();        }      }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError error) {          VolleyLog.d(TAG, "Error: " + error.getMessage());          pDialog.hide();        }      }) {    @Override    protected Map<String, String> getParams() {      Map<String, String> params = new HashMap<String, String>();      params.put("name", "Androidhive");      params.put("email", "abc@androidhive.info");      params.put("password", "password123");      return params;    }  };// Adding request to request queueAppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

添加請(qǐng)求頭部信息

// Tag used to cancel the requestString tag_json_obj = "json_obj_req";String url = "http://api.androidhive.info/volley/person_object.json";ProgressDialog pDialog = new ProgressDialog(this);pDialog.setMessage("Loading...");pDialog.show();   JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,url, null,new Response.Listener<JSONObject>() {  @Override  public void onResponse(JSONObject response) {    Log.d(TAG, response.toString());    pDialog.hide();  }}, new Response.ErrorListener() {  @Override  public void onErrorResponse(VolleyError error) {    VolleyLog.d(TAG, "Error: " + error.getMessage());    pDialog.hide();  }}) {/*** Passing some request headers* */@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {  HashMap<String, String> headers = new HashMap<String, String>();  headers.put("Content-Type", "application/json");  headers.put("apiKey", "xxxxxxxxxxxxxxx");  return headers;}};// Adding request to request queueAppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

創(chuàng)建Image請(qǐng)求
Volley庫中自帶了NetworkImageView類,這個(gè)ImageView可以自動(dòng)使用volley下載圖片
1.用NetworkImageView加載圖片
首先,說明一下,加載圖片的原理:
NetworkImageView加載圖片需要一個(gè)ImageLoader和一個(gè)圖片URL,這個(gè)ImageLoader對(duì)象需要一個(gè)請(qǐng)求隊(duì)列對(duì)象和ImageCahe對(duì)象。調(diào)用NetworkImageView的setUrl方法后,首先會(huì)判斷當(dāng)前ImageView的URL和新傳入的URL是否一致,如果相同,就不用再發(fā)送http請(qǐng)求了,如果不同,那么就使用ImageLoader對(duì)象來發(fā)送http請(qǐng)求獲取圖片。

ImageLoader imageLoader = AppController.getInstance().getImageLoader();// If you are using NetworkImageViewimgNetWorkView.setImageUrl(Const.URL_IMAGE, imageLoader);

加載一個(gè)圖片只要這么簡單~~~
2.用ImageView來加載圖片
這個(gè)過程和NetworkImageView類似

ImageLoader imageLoader = AppController.getInstance().getImageLoader();// If you are using normal ImageViewimageLoader.get(Const.URL_IMAGE, new ImageListener() {  @Override  public void onErrorResponse(VolleyError error) {    Log.e(TAG, "Image Load Error: " + error.getMessage());  }  @Override  public void onResponse(ImageContainer response, boolean arg1) {    if (response.getBitmap() != null) {      // load image into imageview      imageView.setImageBitmap(response.getBitmap());    }  }});

可以再簡單一點(diǎn):

// Loading image with placeholder and error imageimageLoader.get(Const.URL_IMAGE, ImageLoader.getImageListener(imageView, R.drawable.ico_loading, R.drawable.ico_error));


ImageLoader.getImageListener方法中已經(jīng)寫了一個(gè)默認(rèn)的ImageListener了
Volley Cache
volley中自帶了強(qiáng)大的cache機(jī)制來管理請(qǐng)求cache,這會(huì)減少網(wǎng)絡(luò)請(qǐng)求次數(shù)和用戶等待時(shí)間。
從請(qǐng)求Cache中加載請(qǐng)求:

Cache cache = AppController.getInstance().getRequestQueue().getCache();Entry entry = cache.get(url);if(entry != null){  try {    String data = new String(entry.data, "UTF-8");    // handle data, like converting it to xml, json, bitmap etc.,  } catch (UnsupportedEncodingException e) {       e.printStackTrace();    }  }}else{  // Cached response doesn't exists. Make network call here}

使請(qǐng)求緩存失效
失效并不意味這刪除,Volley還會(huì)繼續(xù)使用緩存的對(duì)象直到從服務(wù)器上獲取到了新的數(shù)據(jù),新的數(shù)據(jù)會(huì)覆蓋舊的數(shù)據(jù)。

AppController.getInstance().getRequestQueue().getCache().invalidate(url, true);

關(guān)閉Cache
如果你想將某一個(gè)請(qǐng)求的Cache功能關(guān)閉,直接調(diào)用Request的setShouldCache()方法就可以:

// String requestStringRequest stringReq = new StringRequest(....);// disable cachestringReq.setShouldCache(false);

將某一URL的Cache刪除
調(diào)用Cache的remove方法可以刪除這個(gè)URL的cache:

AppController.getInstance().getRequestQueue().getCache().remove(url);

刪除所有的Cache

AppController.getInstance().getRequestQueue().getCache().clear();

取消請(qǐng)求
在你添加一個(gè)請(qǐng)求到請(qǐng)求隊(duì)列中的時(shí)候,你可以發(fā)現(xiàn),addToRequestQueue(request, tag)方法還接受一個(gè)tag參數(shù),這個(gè)tag就是用來標(biāo)記某一類請(qǐng)求的,這樣就可以取消這個(gè)tag的所有請(qǐng)求了:

String tag_json_arry = "json_req";ApplicationController.getInstance().getRequestQueue().cancelAll("feed_request");

請(qǐng)求優(yōu)先級(jí)
在創(chuàng)建一個(gè)request的時(shí)候可以O(shè)verride Request方法的getPriority方法返回一個(gè)優(yōu)先級(jí),優(yōu)先級(jí)分為:Normal, Low, Immediate, High。

private Priority priority = Priority.HIGH;StringRequest strReq = new StringRequest(Method.GET,      Const.URL_STRING_REQ, new Response.Listener<String>() {        @Override        public void onResponse(String response) {          Log.d(TAG, response.toString());          msgResponse.setText(response.toString());          hideProgressDialog();        }      }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError error) {          VolleyLog.d(TAG, "Error: " + error.getMessage());          hideProgressDialog();        }      }) {    @Override    public Priority getPriority() {      return priority;    }  };

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇礼县| 喜德县| 卓资县| 平阳县| 中山市| 昂仁县| 林周县| 喜德县| 会昌县| 静乐县| 玉溪市| 吴堡县| 温泉县| 石狮市| 沙田区| 松江区| 芦溪县| 阳谷县| 乐至县| 余庆县| 凤山市| 若羌县| 孟村| 梓潼县| 田东县| 通山县| 石城县| 怀安县| 西乡县| 九龙县| 喀喇沁旗| 松原市| 平塘县| 伊吾县| 商河县| 扬州市| 双流县| 鲜城| 太白县| 镇巴县| 尉氏县|