从web加载图像的问题(android)

时间:2011-01-12 12:27:18

标签: android image url

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:Adress系列不受协议支持”,应用程序会冻结。有没有什么办法解决这一问题?感谢

2 个答案:

答案 0 :(得分:0)

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

使用单独的主题或AsyncTask,以便您的用户界面不会冻结。

这可以解决您的问题。

答案 1 :(得分:0)

正如st0le指出的那样,你正试图从UI线程中完成重任务。

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

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

的概念