本篇文章給大家分享的是有關(guān)Android中Volley和Glide框架如何使用,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),衛(wèi)東企業(yè)網(wǎng)站建設(shè),衛(wèi)東品牌網(wǎng)站建設(shè),網(wǎng)站定制,衛(wèi)東網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,衛(wèi)東網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
首先 AndroidStudio中引入Volley三種方法
引入volley.jar文件
添加volley到gradle依賴
compile 'com.mcxiaoke.volley:library:1.0.19'
通過git下載volley,添加為項目module
1:StringRequest
先熱熱身,傳入一個百度鏈接,返回一些數(shù)據(jù)。
1.1簡單請求一個網(wǎng)絡(luò)地址并返回數(shù)據(jù),創(chuàng)建隊列
RequestQueue queue=Volley.newRequestQueue(context);
1.2在需要的地方創(chuàng)建StringRequest(參數(shù)..)
GET/POST
url地址
響應(yīng)監(jiān)聽
錯誤監(jiān)聽
String url = "http://www.baidu.com"; StringRequest request = new StringRequest(Request.Method.GET,url,new Response.Listener<String>(){ @Override public void onResponse(String response) {result = SecuritUtil.aesBase64Decode(response); },new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } });
1.3最后處理要加入到隊列中
queue.add(request);
我去,這就可以了,我自己都緊張了,記得以前用httpconnect的時候,寫的真的是多,還要配置很多的東西,就連retrofit都要寫注解什么的。retrofit我之前有些文章,不怎么會用的同志可以去看看。好了,數(shù)據(jù)是出來了,我沒有截圖,大家了解,這什么都不傳是簡單,但如果想傳值呢,那就POST方法唄。
2:POST帶參數(shù)請求
在創(chuàng)建StringRequest方法前,我們先看一下源碼方法,4個參數(shù)。
/** * Creates a new request with the given method. * * @param method the request {@link Method} to use * @param url URL to fetch the string at * @param listener Listener to receive the String response * @param errorListener Error listener, or null to ignore errors */ public StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; }
2.1:還是一樣的寫創(chuàng)建一個StringRequest,看注釋
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { //成功后 } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //失敗后 } }) {//傳值方法書寫位置 @Override protected Map<String, String> getParams() throws AuthFailureError { HashMap<String, String> map = new HashMap<>(); map.put("name", "liu"); map.put("id", "123456789"); return map; } };//這里需要注意的是getParams()方法是寫在StringRequest(內(nèi))的,括號標(biāo)紅。
2.2最后要把該對象放在queue中
queue.add(request);
這就完事了,傳值直接寫上就OK了,都是鍵值對的形式。到這估計有人覺得這是傳普通值,如果我傳JSON呢,有有有,下面就是。
3:JSON格式傳參和接受數(shù)據(jù)
這個JSON傳值話也是分GET和PSOT方法,GET一般都不傳值,直接填""。POST則是用專用類JsonObjectRequest,如果你覺得不過癮還可以用
JsonArrayRequest。老規(guī)矩還是先看一下源碼
/** * Creates a new request. * @param method the HTTP method to use * @param url URL to fetch the JSON from * @param requestBody A {@link String} to post with the request. Null is allowed and * indicates no parameters will be posted along with request. * @param listener Listener to receive the JSON response * @param errorListener Error listener, or null to ignore errors. */ public JsonObjectRequest(int method, String url, String requestBody, Listener<JSONObject> listener, ErrorListener errorListener) { super(method, url, requestBody, listener, errorListener); }
3.1:請求方式GET,無參數(shù)傳入
JsonObjectRequest json=new JsonObjectRequest(Request.Method.GET, url, "", new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } });
3.2:請求方式POST
JSONObject jsonO=new JSONObject(); try { jsonO.put("name",""); jsonO.put("ID",""); } catch (JSONException e) { e.printStackTrace(); }//創(chuàng)建JSONObject對象 JsonObjectRequest json=new JsonObjectRequest(Request.Method.POST, url, jsonO, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { //ok } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //error } });
3.3:最后要把該對象放在queue中
queue.add(request);
到這里volley怎么用來訪問網(wǎng)絡(luò)數(shù)據(jù)就完事了,到現(xiàn)在還沒有說他的圖片處理,不過這個框架真心好用,所以就寫的多了點。下面咱們來看一下他的圖片處理
4:ImageRequest, 圖片加載
源碼:圖片URL,響應(yīng)的回調(diào)接口,最大圖片寬度,最大圖片高度,圖片配置RGB模式,錯誤的回調(diào)接口
最大圖片寬度(高度)如果不寫可以寫0,
/** * Creates a new image request, decoding to a maximum specified width and * height. If both width and height are zero, the image will be decoded to * its natural size. If one of the two is nonzero, that dimension will be * clamped and the other one will be set to preserve the image's aspect * ratio. If both width and height are nonzero, the image will be decoded to * be fit in the rectangle of dimensions width x height while keeping its * aspect ratio. * * @param url URL of the image * @param listener Listener to receive the decoded bitmap * @param maxWidth Maximum width to decode this bitmap to, or zero for none * @param maxHeight Maximum height to decode this bitmap to, or zero for * none * @param scaleType The ImageViews ScaleType used to calculate the needed image size. * @param decodeConfig Format to decode the bitmap to * @param errorListener Error listener, or null to ignore errors */ public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight, ScaleType scaleType, Config decodeConfig, Response.ErrorListener errorListener) { super(Method.GET, url, errorListener); setRetryPolicy( new DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIES, IMAGE_BACKOFF_MULT)); mListener = listener; mDecodeConfig = decodeConfig; mMaxWidth = maxWidth; mMaxHeight = maxHeight; mScaleType = scaleType; }
用法:每個參數(shù)是什么我都在上面寫好,第幾個參數(shù)是干什么的,還有源碼供大家參考。url為圖片地址
ImageRequest request =new ImageRequest(url,Response.Listener<Bitmap>(){ @Override public void onResponse(Bitmap s) { Log.i("aa", "post請求成功" + s); } } ,0,0,Bitmap.config.RGB_565,new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.i("aa", "post請求失敗" + s);});
5:ImageLoader 圖片緩存機(jī)制(推薦使用)
在普通版中自身是調(diào)用自己的緩存類,這個是我們不能控制的,如果想要控制的就要自己寫類來實現(xiàn)ImageLoader.ImageCache,這就相當(dāng)于我們的自定義View,或者自定義適配器,我們可以更好的去控制我們想要的結(jié)果,比如說,我們要它最大緩存量是10M,超過這個值會發(fā)出警報等。
下面來說簡單用法
ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) { //具體操作,主要針對對緩存數(shù)據(jù)大小、如何緩存。 return null; } @Override public void putBitmap(String url, Bitmap bitmap) { } }); //imgShow是imageview控件。后面參數(shù)分類是失敗和過程時出現(xiàn)的圖片 ImageLoader.ImageListener listener = ImageLoader.getImageListener(imgShow, R.mipmap.ic_launcher, R.drawable.btn_add_true); imageLoader.get(url, listener, 200, 200);
上面這個就可以對圖片進(jìn)行處理,不過還有一個就是定義接口,里面有兩個方法,一個放一個是取,重點是標(biāo)紅
public class ImageCache implements ImageLoader.ImageCache{ //LruCache 是專門用于緩存的類,String可以作為緩存入后的名稱,Bitmap是位圖。 public LruCache<String,Bitmap> lruCache; public int maxCache=10 * 1024 *1024;//最大緩存大小 10M public ImageCache (){ lruCache=new LruCache<>(maxCache);//實例化創(chuàng)建 } @Override public Bitmap getBitmap(String url) {//得到位圖 return lruCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) {//存入位圖 lruCache.put(url,bitmap); } }
6:NetWorkImageView自動適配圖片(控件)
netimg = (NetworkImageView) findViewById(R.id.id_net_img); netimg.setErrorImageResId(R.mipmap.ic_launcher);//錯誤后 netimg.setDefaultImageResId(R.drawable.btn_add_true);//加載中默認(rèn) //這里new ImageCache()是上面自己寫的類 netimg.setImageUrl(url,new ImageLoader(queue,new ImageCache()));
到這里volley基本用法就已經(jīng)夠用了,原本想寫點Glide的用法呢,還有對比,這一篇寫的就不少了。大家可以消化一下,下一篇我寫Glide的簡單用法,然后是Volley對比Glide。
以上就是Android中Volley和Glide框架如何使用,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:Android中Volley和Glide框架如何使用
當(dāng)前網(wǎng)址:http://jinyejixie.com/article40/pggieo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、電子商務(wù)、關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計、靜態(tài)網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)