第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

LruCash使用showImageByThread有Bug

1.剛載入時(shí),可見項(xiàng)目除了最後一個有載入圖片(有時(shí)還錯位),其它只顯示ic_launcher

http://img1.sycdn.imooc.com//557704bd0001efde07681280.jpg

2.要滾動畫面好幾次才會全部載入對應(yīng)的圖片

程式碼如下?

ImageLoader.java

ImageView?imageView;
String?url;
LruCache<String,?Bitmap>?bitmapLruCache;

public?ImageLoader()?{
????int?maxMemory?=?(int)?Runtime.getRuntime().maxMemory();
????int?cashSize?=?maxMemory?/?4;
????bitmapLruCache?=?new?LruCache<String,?Bitmap>(cashSize)?{
????????@Override
????????protected?int?sizeOf(String?key,?Bitmap?value)?{
????????????return?value.getByteCount();
????????}
????};
}

private?Handler?handler?=?new?Handler()?{
????@Override
????public?void?handleMessage(Message?msg)?{
????????if?(imageView.getTag().equals(url))?{
????????????imageView.setImageBitmap((Bitmap)?msg.obj);
????????}
????}
};

public?void?showImageByThread(ImageView?imageView,?final?String?url)?{

????this.imageView?=?imageView;
????this.url?=?url;
????Bitmap?bitmap?=?getBitmapFromCash(url);

????//緩衝沒有bitmap,從網(wǎng)路下載

????if?(bitmap?==?null)?{
????????new?Thread()?{
????????????@Override
????????????public?void?run()?{
????????????????Bitmap?bitmap?=?getBitmapFromURL(url);
????????????????//將下載的bitmap存到緩衝
????????????????addBitmapToCash(url,?bitmap);

????????????????Message?msg?=?Message.obtain();
????????????????msg.obj?=?bitmap;
????????????????handler.sendMessage(msg);
????????????}
????????}.start();
????}?else?{
????????imageView.setImageBitmap(bitmap);
????}
}

public?Bitmap?getBitmapFromURL(String?url)?{
????Bitmap?bitmap?=?null;
????try?{
????????URLConnection?connection?=?new?URL(url).openConnection();
????????InputStream?is?=?connection.getInputStream();
????????bitmap?=?BitmapFactory.decodeStream(is);
????????is.close();
????}?catch?(IOException?e)?{
????????e.printStackTrace();
????}
????return?bitmap;
}

public?void?addBitmapToCash(String?url,?Bitmap?bitmap)?{
????if?(bitmap?!=?null)?{
????????bitmapLruCache.put(url,?bitmap);
????}
}

public?Bitmap?getBitmapFromCash(String?url)?{
????return?bitmapLruCache.get(url);
}


正在回答

4 回答

還有個可能,看你代碼你加載圖片的時(shí)候是不是調(diào)用的showImageByThread(ImageView?imageView,?final?String?url)

這個方法?

你這個loader中只有1個ImageView的引用,多次調(diào)用后,這個引用只指向最后一個ImageView,這也許就是為什么只有最后一個圖片顯示的原因吧。

顯示網(wǎng)絡(luò)圖片有好多庫可以用,universalImageLoader,google的volley。。。。。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

eric_0023 提問者

有可能,但為了多次滑動後就每個對應(yīng)圖片就能顯示
2015-06-10 回復(fù) 有任何疑惑可以回復(fù)我~
#2

orangesweet 回復(fù) eric_0023 提問者

多次滑動相當(dāng)于多次調(diào)用吧,再次調(diào)用的時(shí)候圖片應(yīng)該已經(jīng)下好了,直接從緩存中取,比較快,有可能在下次調(diào)用showImageByThread前,就已經(jīng)把上一個imageview的圖片從緩存中取出,并且顯示好了。
2015-06-10 回復(fù) 有任何疑惑可以回復(fù)我~
#3

eric_0023 提問者 回復(fù) orangesweet

很有道理,謝謝,我試著改看看
2015-06-10 回復(fù) 有任何疑惑可以回復(fù)我~
#4

eric_0023 提問者

非常感謝!
2015-06-10 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

把new handler的操作放在你的showImageByThread()里就可以了

1 回復(fù) 有任何疑惑可以回復(fù)我~

回復(fù) iceliuorange:可以了,把圖片下載獨(dú)立成內(nèi)部類,呼叫時(shí)把imageview和url傳進(jìn)去

public?void?showImageByThread(ImageView?imageView,?final?String?url)?{
????Bitmap?bitmap?=?getBitmapFromCash(url);

????//緩衝沒有bitmap,從網(wǎng)路下載
????if?(bitmap?==?null)?{
????????new?ImageHandlerThreat(imageView,?url).startThread();
????}?else?{
????????imageView.setImageBitmap(bitmap);
????}
}

private?class?ImageHandlerThreat?{
????private?ImageView?imageView;
????private?String?url;

????private?Handler?handler?=?new?Handler()?{
????????@Override
????????public?void?handleMessage(Message?msg)?{
????????????if?(imageView.getTag().equals(url))?{
????????????????imageView.setImageBitmap((Bitmap)?msg.obj);
????????????}
????????}
????};

????public?ImageHandlerThreat(ImageView?imageView,?String?url)?{
????????this.imageView?=?imageView;
????????this.url?=?url;
????}

????public?void?startThread()?{
????????new?Thread()?{
????????????@Override
????????????public?void?run()?{
????????????????Bitmap?bitmap?=?getBitmapFromURL(url);
????????????????//將下載的bitmap存到緩衝
????????????????addBitmapToCash(url,?bitmap);

????????????????Message?msg?=?Message.obtain();
????????????????msg.obj?=?bitmap;
????????????????handler.sendMessage(msg);
????????????}
????????}.start();
????}
}


1 回復(fù) 有任何疑惑可以回復(fù)我~

public?void?handleMessage(Message?msg)?{

????????if?(imageView.getTag().equals(url))?{

????????????imageView.setImageBitmap((Bitmap)?msg.obj);

????????}

????}

這里打個斷點(diǎn),看是什么問題

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
Android必學(xué)-異步加載
  • 參與學(xué)習(xí)       50617    人
  • 解答問題       326    個

了解Android中的異步加載處理方法,這是面試問的最多的知識點(diǎn)

進(jìn)入課程

LruCash使用showImageByThread有Bug

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號