android 在girdview的getview()里用Aquery框架异步下载图片

问题: girdAdapter里的getview使用aquery.id(int id).image(String url, boolean memCache, boolean fileCache, int targetWidth, int fallbackId)这个方法异步下载图片时,imageview无法显示图片

 

解决问题:

由于AQuery很多都是支持方法链接方式,使得程序调试起来并不是很方便。于是打算直接使用AQuery.ajax()方法,这样程序调试会比较可控。大概代码如下

  aq.ajax(url, byte[].class, new AjaxCallback<byte[]>() {        

@Override       

 public void callback(String url, byte[] object, AjaxStatus status) {                

viewHolder.imageView.setImageBitmap(BitmapFactory.

decodeByteArray(object, 0,object.length));        

}

  });
结果:问题还是一样。

 

调试1:是否是网络问题,导致下载失败

      在callback方法中Log.i(“TAG”,”network status==”+status);

      日志输出:network status==OK

调试2:是否下载的对象为null,导致什么都不显示

      在callback方法中Log.i(“TAG”,”byte[].length==”+object.length);

      日志输出:byte[].length==5331

调试3:是否存在不可控的线程问题

      在callback方法中判断android当前线程

     if (Thread.currentThread() == Looper.getMainLooper().getThread()) {

Log.i("TAG", "in");

     } else {

Log.i("TAG", "out");

     }

 

然后,花点时间研究了AQuery

github上的开源库https://github.com/chunjiangshieh/android-demo-androidquery

AQuery异步请求的Google文档 http://blog.csdn.net/h3c4lenovo/article/details/9069607#t16

 

 

解决方案:回到最初的方法,不过参数不同,用AQuery.id(View view),代码如下:

aq.id(viewHolder.imageView).image(item.getImageUrl(),

  false, true,0,R.drawable.ic_launcher);


总结:

对于AQuery来说,gridview中子viewidfindviewbyid找到的子view的关系,就有点类似于Java中的类与实例的关系。当使用AQuery.idint id)绑定视图时,它是找不到对应的view实例的,因此无法显示图片,即使已经通过异步下载下来的了。但是,如果直接手动找到实例,再用上述的方案便能解决问题。 PS:不过这里应该也算是AQuery的一个BUG,出现上述问题,运行程序的时候LogCat并没有报错信息。

 

                 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值