Volley源码解析
1.、使用
Volley通过newRequestQueue(…)方法新建并启动一个请求队列RequestQueue后,只要往这个RequestQueue不断add Request即可。
创建请求队列
RequestQueue mQueue = Volley.newRequestQueue(context);
Get请求
StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Linstener<String>(){
@Override
public void onResponse(String response){
Lod.d(TAG,response);
}
},new Response.ErrorLinstener(){
@Override
public void onErrorResponse(VolleyError error){
Log.e(TAG,error.getMessage());
}
});
Post请求
StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("params1", "value1");
map.put("params2", "value2");
return map;
}
};
加载图片
ImageRequest imageRequest = new ImageRequest(
picurl,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageView.setImageResource(R.drawable.default_image);
}
});
添加到队列
mQueue.add(stringRequest);
2、关键类分析
1)Volley.java
public static RequestQueue newRequestQueue(Context context) {
return newRequestQueue(context, null);
}
public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
String userAgent = "volley/0";
try {
String packageName = context.getPackageName();
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
userAgent = packageName + "/" + info.versionCode;
} catch (NameNotFoundException e) {
}
if (stack == null) {
//根据手机版本号去创建HttpStack对象
if (Build.VERSION.SDK_INT >= 9) {
//HurlStack内部使用HttpURLConnection进行网络通讯
stack = new HurlStack();
} else {
//HttpClientStack内部使用HttpClient进行通讯
stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
Network network