private?ImageView?mImageView;
private?String?murl;
private?LruCache<String,?Bitmap>cache;
public?Pic_loader(){
int?maxSize=(int)?(Runtime.getRuntime().maxMemory())/4;
cache=new?LruCache<String,?Bitmap>(maxSize){
@Override
protected?int?sizeOf(String?key,?Bitmap?value)?{
//?TODO?Auto-generated?method?stub
return?value.getByteCount();
}
};
}
public?void?addBitMapToCache(String?url,Bitmap?bitmap){
if(getBitMapFromCache(url)==null){
cache.put(url,?bitmap);
}
}
public?Bitmap?getBitMapFromCache(String?url){
return?cache.get(url);
}
private?Bitmap?getBitMap(String?url){
Bitmap?bitmap=null;
try?{
InputStream?is=new?URL(url).openConnection().getInputStream();
BufferedInputStream?bif=new?BufferedInputStream(is);
bitmap=BitmapFactory.decodeStream(bif);
is.close();
}?catch?(MalformedURLException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
try?{
Thread.sleep(3000);
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
return?bitmap;
}
public?void?GetPicByAsyncTask(ImageView?imageView,final?String?url){
mImageView=imageView;
murl=url;
Bitmap?bitmap=getBitMapFromCache(url);
if(bitmap==null){
new?NewsAsynctask().execute(url);
}else{
if(imageView.getTag().equals(url)){//如果url不一致加不加載,放置在異步加載時的加載錯誤。
imageView.setImageBitmap(bitmap);
}
}
}
private?class?NewsAsynctask?extends?AsyncTask<String,Void,?Bitmap>{
protected?Bitmap?doInBackground(String...?params)?{
//?TODO?Auto-generated?method?stub
Bitmap?bitmap=getBitMap(params[0]);
if(bitmap!=null){
addBitMapToCache(params[0],?bitmap);
}
return?bitmap;
}
@Override
protected?void?onPostExecute(Bitmap?result)?{
//?TODO?Auto-generated?method?stub
super.onPostExecute(result);
if(mImageView.getTag().equals(murl)){//如果url不一致加不加載,放置在異步加載時的加載錯誤。
mImageView.setImageBitmap(result);
}
}
}
}
2016-12-28
那現(xiàn)在就是表現(xiàn)你的水平時刻到了,自己debug程序試試,在特定的地方打印log比如在return bitmap之前你用Log.i("Bitmap",bitmap.getByteCount()+"");來看看是否存在Bitmap。如果不存在圖片大小,那你就要看看是不是數(shù)據(jù)流出現(xiàn)錯誤。或者代碼運行不對。
2016-12-26
哦,沒看到,你應(yīng)該是忘記關(guān)閉睡眠線程了,在返回bitmap就會延遲反應(yīng)
??try?{
????????????Thread.sleep(3000);
????????}?catch?(InterruptedException?e)?{
????????????//?TODO?Auto-generated?catch?block
????????????e.printStackTrace();
????????}
2016-12-25
上面這些代碼好亂啊。。。
??private?class?NewsAsynctask?extends?AsyncTask<String,Void,?Bitmap>{
? ? ? @Override
????????protected?void?onPostExecute(Bitmap?result)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onPostExecute(result);
????????????if(mImageView.getTag().equals(murl)){//如果url不一致加不加載,放置在異步加載時的加載錯誤。
????????????????mImageView.setImageBitmap(result);
????????????}
????????}? ?
????}
你確定你給的代碼不報空指針?