【问题标题】:How to retrieve an image from an URL? Errors如何从 URL 中检索图像?错误
【发布时间】:2016-03-31 20:27:55
【问题描述】:

我正在解析 JSON Obj 以获取图像的 url。 我正在使用此代码。

private Drawable LoadImageFromWebOperations(String strPhotoUrl) {
    try {
        InputStream is = (InputStream) new URL(strPhotoUrl).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        Log.e("TAGG", strPhotoUrl);
        return d;
    } catch (Exception e) {
        Log.e("TAGG", e.toString());
        return null;
    }
}

但是我得到一个错误,这必须在 AsyncTask 中完成,即不同的线程。但是,我将如何在 ImageView 中插入可绘制对象?由于DoInBackground() 无权访问 UI 元素。此外,在解析从中获取 URL 的 JSON obj 之前,我无法访问 URL。那么在我的情况下我可以使用什么解决方案。谢谢!

【问题讨论】:

  • 使用image-loading libraries for Android 之一,例如Picasso。他们为您处理后台线程等。
  • @CommonsWare 除了使用外部库之外没有其他选择。我是使用库的新手。你能帮我理解吗?谢谢。
  • 有很多关于在Android中使用毕加索的教程。事实上,我上次检查时,他们的 git repo 在 README 中有一些示例
  • @zgc7009 谢谢!我去看看
  • “除了使用外部库之外没有其他选择”——当然有。然而,图像管理很复杂:后台处理、缩放、缓存、跟踪视图在ListViewRecyclerView 等事物中被回收。库有所有这些的实现,由 Android 专家编写,这些专家和成千上万的其他 Android 开发人员通过使用这些库进行了测试。如果您认为自己的用例可以做得更好,请随意实现另一组图像加载代码供您自己使用。

标签: java android json android-asynctask drawable


【解决方案1】:

您可以通过 onPostExecute() 访问 UI 元素。

因此,您可以进行 API 调用并在后台线程中获取数据。图片下载完成后,您可以在 onPostExecute() 方法中将图片设置到 ImageView 中。

【讨论】:

  • 但是我不能使用InputStream is = (InputStream) new URL(strPhotoUrl).getContent();这个onPostExecute
  • 不,您在后台线程中下载图像并在后期执行中使用该图像。
  • 正如我在问题中提到的,我不能在doInBackground() 中这样做,因为那时我没有 URL。我必须解析onPostExecute() 中的URL。这就是为什么。那么我必须使用另一个AsyncTask吗?
  • 嗯,是的。图像下载不能在主 UI 线程上进行。但是,为什么不能在后台线程中解析 URL 并下载图像呢?为什么需要在执行后执行? #justcurious
  • 是的。我有。当您发布此评论时,我正在这样做。我是AsyncTask 的新手。我不知道我是否可以在那里解析 JSON。这就是为什么。对不起。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2020-08-03
相关资源
最近更新 更多