Volley
- 簡介
- 特點
- 使用
- 網絡請求隊列的建立與取消
- Get與Post請求方式
- Get請求方式
- Post請求方式
- 與Activity的生命周期相關聯
- 網絡圖片加載
- 網絡圖片加載并緩存
簡介
Volley意為齊射、并發的意思,是Google在2013年發布的Android平臺上的網絡通信庫
特點
- 網絡通信更快,更簡單(高效地Get、Post請求方式)
- 網絡圖片加載與緩存
- 請求排序(建立了請求隊列)
- 多級別取消請求
- 可以與Activity的生命周期進行關聯
注意:不適合數據的上傳與下載
使用
網絡請求隊列的建立與取消
MyApplication.java
package com.example.demo;import android.app.Application; import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley;/*** 創建全局的請求隊列*/ public class MyApplication extends Application {public static RequestQueue mRequestQueue;@Overridepublic void onCreate() {super.onCreate();mRequestQueue = Volley.newRequestQueue(getApplicationContext());}public static RequestQueue getRequestQueue(){return mRequestQueue;} }Get與Post請求方式
有三個請求對象StringRequest、JsonObjectRequest、JsonArrayRequest,其中StringRequest包含了另外兩個對象
Get請求方式
/*** 使用StringRequest發送Get請求 */ String url = "http://xxx/get?name=zhangsan&sex=male"; StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {@Overridepublic void onResponse(String s) {}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {}}); request.setTag("Get"); MyApplication.getRequestQueue().add(request);Post請求方式
/*** 使用StringRequest發送Post請求 */ String url = "http://xxx"; StringRequest request = new StringRequest(Request.Method.POST,url,new Response.Listener<String>(){@Overridepublic void onResponse(String s) {}},new Response.ErrorListener(){@Overridepublic void onErrorResponse(VolleyError volleyError) {}}){/**** 用戶在使用Post請求方式中參數的傳遞*/@Overrideprotected Map<String, String> getParams() throws AuthFailureError {Map<String,String> hashMap = new HashMap<>();hashMap.put("name","zhangsan"); hashMap.put("sex","male");return hashMap;} }; request.setTag("Post"); MyApplication.getRequestQueue().add(request);與Activity的生命周期相關聯
/*** 將Volley與Activity的生命周期進行關聯*/@Overrideprotected void onStop() {super.onStop();/*** 通過給定的TAG值,將指定的隊列全部關閉*/MyApplication.getRequestQueue().cancelAll("Post");}網絡圖片加載
String url = "https://www.baidu.com/img/bdlogo.png"; ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {@Overridepublic void onResponse(Bitmap bitmap) {}}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {}});request.setTag("Get"); MyApplication.getRequestQueue().add(request);網絡圖片加載并緩存
package com.example.demo;import android.graphics.Bitmap; import android.util.LruCache;import com.android.volley.toolbox.ImageLoader;public class BitmapCache implements ImageLoader.ImageCache {LruCache<String,Bitmap> cache;int max = 10*1024*1024;public BitmapCache(){cache = new LruCache<String,Bitmap>(max){@Overrideprotected int sizeOf(String key, Bitmap value) {return value.getRowBytes()*value.getHeight();}};}@Overridepublic Bitmap getBitmap(String s) {return cache.get(s);}@Overridepublic void putBitmap(String s, Bitmap bitmap) {cache.put(s,bitmap);} }方式一
String url = "https://www.baidu.com/img/bdlogo.png";ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());ImageListener listener = ImageLoader.getImageListener(iv,R.drawable.default,R.drawable.error) imageLoader.get(url,listener);方式二
String url = "https://www.baidu.com/img/bdlogo.png";ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());NetworkImageView networkImageView=(NetworkImageView)findViewById(R.id.img); networkImageView.setDefaultImageResId(R.drawable.default); networkImageView.setErrorImageResId(R.drawable.error); networkImageView.setImageUrl(url,imageLoader);總結
- 上一篇: Toast
- 下一篇: DrawerLayout