【问题标题】:problem loading image from web (android)从网络加载图像的问题(android)
【发布时间】:2011-01-12 12:27:18
【问题描述】:
public Object fetch(String address) throws MalformedURLException,
IOException {
    URL url = new URL(address);
    Object content = url.getContent();
    return content;
}  

private Drawable ImageOperations(Context ctx, String url) {
    try {
        InputStream is = (InputStream) this.fetch(url);
        Drawable d = Drawable.createFromStream(is, "src");
        return d;
    } catch (MalformedURLException e) {
        return null;
    } catch (IOException e) {
        return null;
    }
    catch (Exception e) 
    {
        return null;
    }
}

try {
            Drawable a =ImageOperations(this,"url"); imgView.setImageDrawable(a);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();

这可行,但在极少数情况下,由于“SocketException:协议不支持地址系列”,应用程序会冻结。有没有什么办法解决这一问题?谢谢

【问题讨论】:

    标签: android image url


    【解决方案1】:

    您正在尝试从 UI 线程下载文件...(这就是您的 UI 冻结的原因)

    使用单独的线程或AsyncTask,这样您的 UI 就不会冻结。

    这应该可以解决您的问题。

    【讨论】:

    • 好的,我已经尝试了这个线程中的第一个答案:stackoverflow.com/questions/3090650/…,但是“new DownloadImageTask.execute(mChart);”的“DownloadImageTask”部分即使创建了类,也会在 Eclipse 中变红。我错过了什么吗?
    【解决方案2】:

    正如 st0le 所指出的,您正在尝试从 UI 线程执行繁重的工作。

    Android 中所有繁重的工作都应该在其他 worker thread 上完成。因为在main thread(或 UI 线程)中执行此操作会使您的应用程序无响应,并且可能会在系统被说服认为它已挂起时被杀死。

    因此您必须在单独的线程中执行长时间运行的操作。为了实现这一点,您可以使用Handlers 的概念。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多