проблема загрузки изображения из Интернета (Android) - PullRequest
0 голосов
/ 12 января 2011
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: семейство адресов не поддерживается протоколом». Есть ли способ это исправить? Спасибо

Ответы [ 2 ]

0 голосов
/ 12 января 2011

Как уже указывало st0le, вы пытаетесь сделать сверхпрочные вещи из потока пользовательского интерфейса.

Все сверхпрочные вещи в Android должны выполняться на других worker thread. Потому что выполнение этого в main thread (или потоке пользовательского интерфейса) может привести к тому, что ваше приложение перестает отвечать на запросы и может быть убито, поскольку система убеждена, что оно зависло.

Таким образом, вы должны выполнять длительные операции в отдельном потоке. Для реализации этого вы можете использовать концепцию Handlers .

0 голосов
/ 12 января 2011

Вы пытаетесь загрузить файл из потока пользовательского интерфейса ... (вот почему ваш пользовательский интерфейс зависает)

Используйте отдельную тему или AsyncTask , чтобы ваш пользовательский интерфейс не зависал.

Это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...