1.Application设置请求队列
public class MyApplication extends Application {
public static RequestQueue sQueue;
@Override
public void onCreate() {
super.onCreate();
sQueue = Volley.newRequestQueue(this);
}
}
2.创建字符请求对象
mRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
tv.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
MyApplication.sQueue.add(mRequest);
3.创建图片请求对象,网络请求图片
- 普通下载图片
* 参数说明:
* 1、请求的网址
* 2、请求成功回调接口
* 3、图片的最大的宽度
* 4、图片的最大的高度
* 5、图片在ImageView上面显示的样式
* 6、图片的解码格式
* 7、请求失败的回调接口
* */
ImageRequest request1=new ImageRequest(url1, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
iv1.setImageBitmap(response);
}
}, iv1.getWidth(), 200, ImageView.ScaleType.FIT_CENTER, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(ImageActivity.this,"网络异常",Toast.LENGTH_LONG).show();
}
});
//开启请求
MyApplication.queue.add(request1);
4.可以使用volley封装的ImageView,可以设置缓存和异步下载对象
imageLoader
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/iv2"
android:src="@mipmap/ic_launcher"
android:onClick="click"
android:layout_width="match_parent" android:layout_height="100dp"/>
//设置错误图片
iv2.setErrorImageResId(R.mipmap.ic_launcher);
ImageLoader loader1=new ImageLoader(MyApplication.queue,new MyImageCache());
iv2.setImageUrl(url1,loader1);//开启异步下载
5使用带缓存的imageLoader
ImageLoader imageLoader2 = new ImageLoader(MyApplication.sQueue,new MyImageCache());
ImageLoader.ImageListener listener=ImageLoader.getImageListener(
iv3,R.mipmap.ic_launcher,R.mipmap.ic_launcher);//默认和错误图片
//加载图片
imageLoader2.get(url,listener);
6、设置自定义的缓存
public class MyImageCache implements ImageLoader.ImageCache {
private SoftReference<LruCache<String,Bitmap>> softReference;
private ReferenceQueue<LruCache<String,Bitmap>> queue;//软引用图片回收会导致空指针,放入引用队列,可在没有引用时取回对象
public MyImageCache() {
queue=new ReferenceQueue<>();
softReference=new SoftReference<LruCache<String, Bitmap>>(
new LruCache<String, Bitmap>(
(int) (Runtime.getRuntime().maxMemory()/8))
{
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();//重写sizeOf
}
},queue);
}
@Override
public Bitmap getBitmap(String url) {
return softReference.get().get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
softReference.get().put(url,bitmap);
}
}