我目前正在开发一个具有List的应用程序,该List使用LazyLoader方法填充,因此我将使用以下类:
FileCache.java, ImageLoader.java, LazyAdapter.java, Utils.java
基本上,当我填充List时,图像Load fin,但是我想在选择它时在单个项目视图上显示所选列表项的图像。因此,当用户单击列表项时,他们将被带到新活动以查看该项目周围的所有详细信息。为了保存数据库调用,我已经在列表中收集了所有需要的数据并将其隐藏在字段中,然后使用以下方法将其传递给单项视图:
String ImageURL = ((TextView) view.findViewById(R.id.ImageURL)).getText().toString();
Intent i = new Intent(getApplicationContext(), VenueItem.class);
i.putExtra("ImageURL", ImageURL);
startActivity(i);
然后将该URL和我发送到新活动的一堆其他数据传递给它。当它到达新活动时,我正在使用以下方法读取该数据:
String image_url;
Intent i = getIntent();
image_url = i.getStringExtra("ImageURL");
ImageView thumb_image=(ImageView) findViewById(R.id.itemImage); // thumb image
imageLoader.DisplayImage(image_url, thumb_image); //This is the line it fails on
正如你所看到的,我已经突出显示上面看起来失败的行,并且我得到了一个nullpointerexception错误,即使我已经调试了代码,当它遇到该行时,它传递的2个参数都存在。图像加载器的代码如下:
final int stub_id = R.drawable.noimage;
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null)
imageView.setImageBitmap(bitmap);
else
{
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
}
我认为这与我调用图像加载器的方式有关,也许有人请帮助我,因为它太烦人了?或者有人能告诉我一个更好的方法来让图像已经缓存并显示在列表中以显示单项活动吗?
由于
答案 0 :(得分:2)
这可能听起来很愚蠢,但你真的实例化了imageLoader吗?因为你没有包含它的代码;)
似乎imageLoader变量可能是null,而不是你传入它的image_url和thumb_image。
尝试运行
imageLoader.DisplayImage(image_url, thumb_image);
如果imageLoader为null,则会导致NullPointerException,例如你已经声明了它但没有实例化它:
ImageLoader imageLoader;
哪个需要
ImageLoader imageLoader = new ImageLoader();