亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

就只是簡單的直接使用GertImageFromURL()的那種方法來加載(不是用滾動條監聽的方式),但是第一頁圖片都只是默認圖片沒有加載啊,必須把一個item小時候重新刷一下才有圖片

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);
			}
		}
		
	}

}


正在回答

3 回答

那現在就是表現你的水平時刻到了,自己debug程序試試,在特定的地方打印log比如在return bitmap之前你用Log.i("Bitmap",bitmap.getByteCount()+"");來看看是否存在Bitmap。如果不存在圖片大小,那你就要看看是不是數據流出現錯誤?;蛘叽a運行不對。

0 回復 有任何疑惑可以回復我~
#1

D_inasour 提問者

調試了,imageview不為空,bipmap內容也有·····
2016-12-28 回復 有任何疑惑可以回復我~
#2

D_inasour 提問者

非常感謝!
2016-12-29 回復 有任何疑惑可以回復我~

哦,沒看到,你應該是忘記關閉睡眠線程了,在返回bitmap就會延遲反應

??try?{

????????????Thread.sleep(3000);

????????}?catch?(InterruptedException?e)?{

????????????//?TODO?Auto-generated?catch?block

????????????e.printStackTrace();

????????}


0 回復 有任何疑惑可以回復我~
#1

D_inasour 提問者

可是等了很久依舊沒有顯示出來呢····苦惱
2016-12-27 回復 有任何疑惑可以回復我~

上面這些代碼好亂啊。。。

??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);

????????????}

????????}? ?

????}

你確定你給的代碼不報空指針?

0 回復 有任何疑惑可以回復我~
#1

D_inasour 提問者

mimageView在調用GetPicByAsyncTask()方法時就初始化了
2016-12-26 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android必學-異步加載
  • 參與學習       50616    人
  • 解答問題       333    個

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

進入課程

就只是簡單的直接使用GertImageFromURL()的那種方法來加載(不是用滾動條監聽的方式),但是第一頁圖片都只是默認圖片沒有加載啊,必須把一個item小時候重新刷一下才有圖片

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號