为了账号安全,请及时绑定邮箱和手机立即绑定

就只是简单的直接使用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。如果不存在图片大小,那你就要看看是不是数据流出现错误。或者代码运行不对。

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必学-异步加载
  • 参与学习       50627    人
  • 解答问题       311    个

了解Android中的异步加载处理方法,这是面试问的最多的知识点

进入课程

就只是简单的直接使用GertImageFromURL()的那种方法来加载(不是用滚动条监听的方式),但是第一页图片都只是默认图片没有加载啊,必须把一个item小时候重新刷一下才有图片

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信