一、Volley簡介。
1.Volley起源。
Volley是2013年Google I/O上發佈的一款網絡框架,基於Android平臺,能使網絡通信更快,更簡單,更健全。
2.Volley框架的優點。
1)網絡請求的排序(scheduling)。
2)網絡請求的優先級處理。
3)緩存。
4)多級別取消請求。
5)和Activity和生命週期的聯動(Activity結束時同時取消所有網絡請求)。
6)非常適合去進行數據量不大,但通信頻繁的網絡操作。
7)可以自定義拓展。
3.Volley框架的缺點
對於大數據量的網絡操作,比如說下載文件等,Volley的表現不好。
4.項目地址
1)官網地址:https://android.googlesource.com/platform/frameworks/volley
2) jar包下載地址:http://download.csdn.net/detail/sinyu890807/7152015
二、Volley的基本使用
1.Volley的API
1)請求String類型數據:StringRequest
2)請求JSON數據:JsonRequest
a)JsonObjectRequest
b)JsonArrayRequest
3)請求圖片數據:ImageRequest
2.Volley使用步驟
1)導入jar包
2)添加聯網權限
<uses-permission android:name="android.permission.INTERNET" />
3)ApI的使用
三、Volley的案例
1.網絡請求
1)get請求
// get請求
bt_volley_get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 網絡數據地址
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
// 創建一個請求
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// 設置顯示結果
tv_volley_result.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv_volley_result.setText("請求失敗");
}
});
// 將請求添加到請求隊列中
requestQueue.add(stringRequest);
}
});
2)post請求
// post請求
bt_volley_post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 網絡數據地址
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
// 創建一個請求
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// 設置顯示結果
tv_volley_result.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv_volley_result.setText("加載失敗");
}
}){
// 添加請求參數的方法
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<String, String>();
// map.put("value1","parame1");
return map;
}
};
// 將請求添加到請求隊列中
requestQueue.add(stringRequest);
}
});
3)請求json數據
// 請求json數據
bt_volley_json.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 網絡數據地址
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
// 創建一個json請求
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
// 設置顯示結果
tv_volley_result.setText(jsonObject.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv_volley_result.setText("失敗"+volleyError.toString());
}
});
// 將json請求添加到請求隊列中
requestQueue.add(jsonObjectRequest);
}
});
2.圖片加載
1)ImageRequest加載圖片
// ImageRequest加載圖片
bt_volley_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 網絡圖片地址
String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
// 創建一個圖片請求
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
iv_volley.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
iv_volley.setImageResource(R.drawable.atguigu_logo);
}
});
// 將圖片請求添加到請求隊列中
requestQueue.add(imageRequest);
}
});
2)ImageLoader加載圖片
// ImageLoader加載圖片
bt_volley_imageloader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 創建一個帶緩存的ImageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
// 獲取圖片的監聽:參數1:用於顯示圖片的ImageView控件;參數2:加載圖片的過程中顯示的圖片
// 參數3:加載圖片失敗的情況下顯示的圖片
ImageLoader.ImageListener imageListener = imageLoader.getImageListener(iv_volley, R.drawable.atguigu_logo, R.drawable.atguigu_logo);
// 網絡圖片地址
String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
// 加載圖片
imageLoader.get(url, imageListener);
}
});
/**
* 緩存類
*/
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
3)NetworkImageView加載圖片 // networkimageview顯示圖片
bt_volley_networkimageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 創建一個帶緩存的ImageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
// 設置默認圖片
iv_volley_network.setDefaultImageResId(R.drawable.atguigu_logo);
// 設置請求失敗後的圖片
iv_volley_network.setErrorImageResId(R.drawable.atguigu_logo);
String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
// 設置顯示的圖片
iv_volley_network.setImageUrl(url, imageLoader);
}
});
看到此,是不是接的EventBus的簡單使用是不是很簡單,謝謝瀏覽!