【问题标题】:android:display image in listviewandroid:在列表视图中显示图像
【发布时间】:2014-08-19 09:22:13
【问题描述】:

我正在尝试使用 JSON 解析在列表视图中显示来自 url 的图像。图像 url 在日志中正确显示。当我尝试下载图像并显示在列表中时,在 bmImage.setImageBitmap(result) 中获取 NullPointerException; 我正在使用以下代码,谁能告诉我解决方案..

 private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
     ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {

        Bitmap bt_img = null;


        try {
             FileInputStream in = new FileInputStream(urls[0]);

             InputStream in = new java.net.URL(urls[0]).openStream();
             bt_img = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
             Log.e("Error", e.getMessage());
             e.printStackTrace();
        }
        return bt_img;
    } 

    protected void onPostExecute(Bitmap result) {
        try {
            bmImage.setImageBitmap(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 亲爱的使用Android Query,它非常非常高效并且工作非常好
  • 访问这里:这是我的名字的答案:stackoverflow.com/questions/541966/…,检查它并这样做,它会正常工作,我很确定
  • 尝试使用通用图像加载器库来异步加载图像。您所要做的就是传递图像的 URL 和图像视图,您将获得所需的结果

标签: android android-layout android-listview


【解决方案1】:

如果您在 bmImage 变量上收到 nullPointerException,则表示它尚未初始化。在您提供的代码中,您没有得到它的引用,您必须将它传递给 AsyncTask。

传递 bmImage 引用并调用 AsyncTask 的代码是什么?问题似乎出在该代码中,而不是 AsyncTask 本身。

【讨论】:

  • 我在我的代码中将此 AsyncTask 称为 new DownloadImageTask(image).execute(image_);这里的图像只不过是 image = ((ImageView)findViewById(R.id.image_list)); image_ 是我的图片网址。
  • @Namitha 我认为这完全是个坏主意,应该有很多可能导致应用程序崩溃,为什么要进行硬编码,因为我们有库可以直接使用。
  • @pratik 你能告诉我应该使用哪些库
  • 我已经在上面评论过你了,亲爱的你看看吧,像AQuery,Picasso这样的有很多,但是AQuery是令人兴奋的。
  • @namitha 你明白了吗?
【解决方案2】:
 1)  best way is use Lazy Loding 
    and
 2) second way is try this code,
    try {
            URL imageURL = new URL(imgUrl);
            qrBitmap = BitmapFactory.decodeStream(imageURL.openStream());

            image.setImageBitmap(qrBitmap);

            } catch (Exception e) {
            Log.d("QRDisplay", e.getMessage());
            }

【讨论】:

    【解决方案3】:

    您必须使用通用图像加载器从服务器获取图像。

    这个链接对你有帮助

    https://github.com/nostra13/Android-Universal-Image-Loader

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2012-05-26
      • 2013-04-24
      相关资源
      最近更新 更多