例如:“aaa”:{
“bbb”:“http://photocdn.sohu.com/20140722/Img402572977.jpg”;
}
1.首先处理json,获得String url=“http://photocdn.sohu.com/20140722/Img402572977.jpg”;
2.在BaseAdapter调用iamgeLoaderByUrl(),,传进imageView和url,在方法中新开线程,处理url
public void iamgeLoaderByUrl(ImageView imageView,final String url){
this.mImageView=imageView;
this.mUrl=url;
//从缓存中取出对应的图片
Bitmap bitmap=getBitmapFromCache(url);
//如果缓存中没有,那么必须去下载
if (bitmap==null) {
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap=getbitmable(url);
Message message=Message.obtain();
message.obj=bitmap;
handler.sendMessage(message);
}
}).start();
}else {
//否则直接使用缓存的图片
mImageView.setImageBitmap(bitmap);
}
}
public void iamgeLoaderByUrl(ImageView imageView,final String url){
this.mImageView=imageView;
this.mUrl=url;
//从缓存中取出对应的图片
Bitmap bitmap=getBitmapFromCache(url);
(第四步) //如果缓存中没有,那么必须去下载
if (bitmap==null) {
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap=getbitmable(url);
Message message=Message.obtain();
message.obj=bitmap;
handler.sendMessage(message);
}
}).start();
}else {
//否则直接使用缓存的图片
mImageView.setImageBitmap(bitmap);
}
}
public Bitmap getbitmable(String url1) {
Bitmap bitmap=null;
InputStream is = null;
try {
//从其网络获取图片
URL url=new URL(url1);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
is=new BufferedInputStream(connection.getInputStream());
bitmap=BitmapFactory.decodeStream(is);
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*(第五步)
//将不在缓存的图片加入缓存
addBitmapToCache(url1, bitmap);
return bitmap;
}
//图片的缓存
//创建Cache
(第一步) private LruCache<String, Bitmap> mCaches;
//(第二步)
public ImageLoader() {
//获取最大可用内存
int maxMemory=(int) Runtime.getRuntime().maxMemory();
int cachSize=maxMemory/4;
mCaches=new LruCache<String, Bitmap>(cachSize){
@Override//(第三步)
protected int sizeOf(String key, Bitmap value) {
// 在每次存入缓存的时候调用
return value.getByteCount();
}
};
}
//增加到缓存
public void addBitmapToCache(String url,Bitmap bitmap){
if (getBitmapFromCache(url)==null) {
mCaches.put(url, bitmap);
}
}
//从缓存中获取数据
public Bitmap getBitmapFromCache(String url){
return mCaches.get(url);
}
图片缓存的步骤:
1.创建LruCache,并确定键值对。(Lrucache相当于Map,有键值对保存数据)
2.获取最大内存,分配一定的内存(1/4)给LruCache,并初始化。
3.在初始化里,重写SizeOf(),返回bitmap的大小。告诉系统bitmap有多大。
4.在iamgeLoaderByUrl()里,取出bitmap,判断是否为null,如果是就从网络下载,否则直接从内存取出。
5.在网络下载中,还要将下载的图片放进缓存中
需在adapter的构造方法中实例化