虽然不是原创,但此文纯手写,喜欢请关注。个人学习笔记,请不要见笑。通过学习郭霖大神的http://blog.csdn.net/guolin_blog/article/details/17482095
加上自己的理解。
volley 下载:http://download.csdn.net/detail/sinyu890807/7152015
在清单文件中添加权限:
<uses-permission android:name="android.permission.INTERNET" />
volley使用起来先要s声明RequestQueue,注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。
RequestQueue mQueue = Volley.newRequestQueue(context);
1、StringRequest的用法(get请求)/**
* 用StringRequest去请求
* 第一步创建request对象,
* cnew listener成功时返回,
* new Errolistener失败是返回。
* 把创建好的放进 实例化好的RequestQueue mQueue;
*/
public void init() {
// 可以看到,这里new出了一个StringRequest对象,
// StringRequest的构造函数需要传入三个参数,
// 第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,
// 第三个参数是服务器响应失败的回调. 然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。
StringRequest stringRequest = new StringRequest(URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) { //这里是我自己封装的一个log方法。
Tool.show(Volley1.this, response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Tool.show(Volley1.this, error.toString() + "=====" + error);
}
});
// 把StringRequet放到已经创建好的mQUeue
mQueue.add(stringRequest);
}
2、StringRequest的用法(post请求)
/**
* 用StringRequest带参请求
* 第一步创建request对象,
* cnew listener成功时返回,
* new Errolistener失败是返回。
* {这里面写一个请求参数}
* 把创建好的放进 实例化好的RequestQueue mQueue;
*/
public void init1() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Tool.show(Volley1.this, s.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Tool.show(Volley1.this, volleyError.toString() + "=====" + volleyError);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("pno", "2");
return map;
}
};
mQueue.add(stringRequest);
}
3、JsonRequest的用法
/**
* JsonRequest请求方式
* 第一步创建request对象,
* cnew listener成功时返回,
* new Errolistener失败是返回。
* 把创建好的放进 实例化好的RequestQueue mQueue;
*/
public void init2() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Tool.show(Volley1.this, response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Tool.show(Volley1.this, error.toString() + "========" + error);
}
});
mQueue.add(jsonObjectRequest);
}
4、 ImageRequest的用法
/**
* ImageRequest请求网络图片
* 第一个参数图片网址
* 第二个参数请求成功的回调
* 第三第四个参数分别用于指定允许图片最大的宽度和高度,
* 如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,
* 指定成0的话就表示不管图片有多大,都不会进行压缩
* 第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用
* 其中ARGB_8888可以展示最好的颜色属性,
* 每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。
* 第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。
*/
public void init3() {
ImageRequest imageRequest = new ImageRequest(
IMG, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
img.setImageBitmap(response);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
img.setImageResource(R.mipmap.img1);
}
});
mQueue.add(imageRequest);
}
5、 ImageLoader的用法
/**
* ImageLoader请求网络
* ImageLoader的构造函数接收两个参数,第一个参数就是RequestQueue对象,
* 第二个参数是一个ImageCache对象,这里我们先new出一个空的ImageCache的实现即可。
* 我们通过调用ImageLoader的getImageListener()
* 方法能够获取到一个ImageListener对象,getImageListener()方法接收三个参数,
* 第一个参数指定用于显示图片的ImageView控件,
* 第二个参数指定加载图片的过程中显示的图片,
* 第三个参数指定加载图片失败的情况下显示的图片。
* 调用ImageLoader的get()方法来加载图片
*/
public void init4() {
//这里是自己写好了一个缓存的接口,所以注释掉了
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
// ImageLoader imageLoader1 = new ImageLoader(mQueue, new ImageLoader.ImageCache() {
// @Override
// public Bitmap getBitmap(String s) {
// return null;
// }
//
// @Override
// public void putBitmap(String s, Bitmap bitmap) {
//
// }
// });
ImageLoader.ImageListener listener = ImageLoader.getImageListener(img, R.mipmap.img2, R.mipmap.img2);
imageLoader.get(IMG, listener);
}缓存的接口
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);
}
}
NetworkImageView的用法
1、先写一个它自带的xml控件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Send Request" />
<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>
2在布局中反射这个控件
这是
NetworkImageView这个类型的,千万不要写错
network_img = (NetworkImageView) findViewById(R.id.network_img);3代码实现
/**
* Volley还提供了第三种方式来加载网络图片,即使用NetworkImageView
* NetworkImageView是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。
* NetworkImageView控件的用法要比前两种方式更加简单
* 1. 创建一个RequestQueue对象。
* 2. 创建一个ImageLoader对象。
* 3. 在布局文件中添加一个NetworkImageView控件。
* 4. 在代码中获取该控件的实例。
* 5. 设置要加载的图片地址。
* <p>
* setDefaultImageResId()方法、setErrorImageResId()方法和setImageUrl()
* 方法来分别设置加载中显示的图片,加载失败时显示的图片,以及目标图片的URL地址
* 其中,setImageUrl()方法接收两个参数,第一个参数用于指定图片的URL地址,第二个参数则是前面创建好的ImageLoader对象。
* 压缩过程是在内部完全自动化的,并不需要我们关心,
*/
public void init5() {
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
network_img.setDefaultImageResId(R.mipmap.img1);
network_img.setErrorImageResId(R.mipmap.img2);
network_img.setImageUrl(IMG,
imageLoader);
}通过测试看出来Imageloder虽然好用但是点击一次就会加载一遍,而networkImageView则加载一次后,不会在加载。
转载请注明原文地址: https://ju.6miu.com/read-22524.html