2016-03-31 4 views
0

Я разбираю JSON Obj, чтобы получить URL-адрес изображения. Я использую этот код.Как получить изображение из 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() не имеют доступа к элементам пользовательского интерфейса. Также у меня нет доступа к URL-адресу, пока я не разобрал JSON obj. Я получаю URL-адрес. Итак, какое решение я могу использовать в своей ситуации. Благодаря!

+0

Используйте одну из [библиотек для загрузки изображений для Android] (http://android-arsenal.com/tag/46), например [Picasso] (http://square.github.io/picasso/) , Они обрабатывают фоновый поток и такие для вас. – CommonsWare

+0

@CommonsWare нет другого способа, кроме использования внешних библиотек. Я новичок в использовании библиотек. Не могли бы вы помочь мне разобраться? Благодарю. –

+0

Существует множество учебных пособий по использованию Picasso в Android. На самом деле, последний раз, что я проверил, у их git repo было несколько примеров в README – zgc7009

ответ

1

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

Итак, вы можете сделать вызов API и получить данные в фоновом потоке. После загрузки изображения вы можете установить изображение в ImageView в методе onPostExecute().

+0

Но я не могу использовать 'InputStream is = (InputStream) новый URL (strPhotoUrl) .getContent();' Это в 'onPostExecute' –

+0

Нет, вы загружаете изображение в фоновый поток и используете это изображение в post execute. – Swayam

+0

Как я упоминал в вопросе, я не могу сделать это в 'doInBackground()', потому что у меня нет URL-адреса. Мне нужно проанализировать URL-адрес в 'onPostExecute()'. Вот почему. Так что я должен использовать ДРУГОЙ 'AsyncTask'? –

Смежные вопросы