当下的网络框架有很多很多,volley就是其中的一款,当然volley现在已经不是当前最火的网络框架了,但是作为Google推出的框
架还是有必要学习记录一下的。以下就是volley框架的一个详细总结。如下所示是一个简单的get请求(stringRequest对象中没有添加
请求方法默认为get请求):
1.使用volley进行网络请求的三步(返回对象为String)。
1.创建一个请求队列。
RequestQueue requestQueue= Volley.newRequestQueue(context);
2.创建一个请求StringRequest对象。exa:
StringRequest stringRequest=new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
3.将请求StringRequest对象添加到requestQueue中。
requestQueue.add(stringRequest);
2.使用Volley进jsonObject请求。也是有分为三步。如下所示:
需要注意的是使用 JsonObjectRequest 发POST请求时, Volley官方说在getParams(xxx) 方法中传递POST参数是无效的, 需要在构造方法中通过 JsonObject 去传递参数, 如下:
1.创建一个请求队列。
RequestQueue requestQueue= Volley.newRequestQueue(context);
2.创建一个请求StringRequest对象。exa:
Map<String, String> paramsmap = new HashMap<String, String>();paramsmap.put("username","hello_world");paramsmap.put("password", "123456");
paramsmap.put("sex","1");JSONObject paramJsonObject = new JSONObject(params);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,url, paramJsonObject
, new Response.Listener<JSONObject>() {@Override public void onResponse(JSONObject response) {
} }, new Response.ErrorListener() { @Override
public void onErrorResponse(VolleyError error) { } }){ @Override protected Map<String, String> getParams() throws AuthFailureError {return requestParams(map集合);}};3.将请求StringRequest对象添加到requestQueue中。
requestQueue.add(jsonObjectRequest);
3.使用volley中的ImageRequest进行网络图片的加载.同理也是要进行三步操作。如下:
1.创建一个请求队列。
RequestQueue requestQueue= Volley.newRequestQueue(context);
2.创建一个图片请求对象,如下:
RequestQueue requestQueue= Volley.newRequestQueue(context); //第三个参数和第四个参数分别表示加载网络图片的宽高,如果网络图片的宽高大于指定的宽高,则会进行压缩,
//第四个参数用于指定图片的颜色属性,其中的几个值都可以使用 ImageRequest imageRequest=new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { }
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } });
3.将图片请求添加到请求队列中。
requestQueue.add(imageRequest);
4.对于使用volley来进行图片加载的话还不仅仅是上面的那种方法。Volley中的ImageLoader方法如下:1. 创建一个RequestQueue对象。
RequestQueue requestQueue= Volley.newRequestQueue(context);
2. 使用Volley中的ImageLoader来进行网络图片的加载。
ImageLoader imageLoader=new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) { return null; } @Override public void putBitmap(String url, Bitmap bitmap) { } });
3. 获取一个ImageListener对象。
ImageLoader.ImageListener imageListener=imageLoader.getImageListener(imageview,defalutimage,errorimage);
4. 调用ImageLoader的get()方法加载网络上的图片。
imageLoader.get(url, imageListener);
使用ImageLoader进行图片加载的时候,使用了ImageCache的空实现并没有体现出Volley加载图片的优势来,如下可以对图片进行压缩缓存。
public class BitmapCache implements 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); } }
最后ImageLoader则变为:
ImageLoader imageLoader=new ImageLoader(requestQueue, new BitmapCache());
5.使用Volley中的NetworkImageView来进行网络图片的加载。
NetworkImageView是一Volley提供的一个图片显示控件,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。NetworkImageView控件的用法要比前两种方式更加简单,大致可以分为以下五步:(第一步和第二步与ImageLoader的用法是一样的。)
1. 创建一个RequestQueue对象。
RequestQueue requestQueue= Volley.newRequestQueue(context);
2. 创建一个ImageLoader对象。
ImageLoader imageLoader=new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) { return null; } @Override public void putBitmap(String url, Bitmap bitmap) { } });
3. 在布局文件中添加一个NetworkImageView控件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image_view"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
4. 在代码中获取该控件的实例。
networkImageView = (NetworkImageView) findViewById(R.id.network_imageview);
5. 设置要加载的图片地址。
networkImageView.setDefaultImageResId(R.drawable.default_image);
networkImageView.setErrorImageResId(R.drawable.failed_image);
networkImageView.setImageUrl("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",imageL
oader);
NetworkImageView对图片的进行压缩时压缩过程是在内部完全自动化的,我们无需知道,NetworkImageView会始终呈现给我们一张大小刚刚好的网络图片,不会多占用任何一点内存 。