2014-12-29 3 views
2

В основном я разбираю некоторые JSON, у которых есть изображение с ним и пытается загрузить его в ImageView. Однако mBitmap возвращает null. Я понятия не имею, почему и дальнейшее исследование не помогло ..Почему BitmapFactory.decodeStream возвращает null?

Вот пример URL я работаю с:

http://b.thumbs.redditmedia.com/ivBAJzLMJEkEy9jgTy3z4n-mO7gIGt5mQFU1Al5kJ-I.jpg 

Здесь все соответствующий код:

public static Bitmap LoadImageFromUrl(String url){ 
    try { 
     mBitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent()); 
     return mBitmap; 
    }catch (Exception e){ 
     Log.d(TAG,"Error getting image"); 
     return null; 
    } 
} 

Вот где метод называется:

mListingModel.setmImageView(LoadImageFromUrl(data.getString(JSON_THUMBNAIL))); 

Вот где я поставил ImageView:

if(mItem.getmImageView() != null) { 
     holder.imageView.setImageBitmap(mItem.getmImageView()); 
    } 

Примечание: Я вызываю метод в AsyncTask, так что это не проблема.

+0

Какие у вашего приложения есть разрешения? Также: включите свой логарифм, на всякий случай там что-то есть ... – DigCamara

+0

Я бы рекомендовал использовать любую из десятков библиотек для загрузки изображений, вместо того, чтобы пытаться использовать 'getContent()' на 'URL'. Вы, скорее всего, получите больше информации о регистрации, которая поможет вам изолировать ваши проблемы, и они обычно могут обрабатывать асинхронное заполнение «ImageView». Например, рассмотрим [Picasso] (http://square.github.io/picasso/). – CommonsWare

+0

@DigCamara У меня уже есть разрешение для Интернета, включенное в мой манифест, поскольку оно загружает другие данные с веб-сайта. Когда я вернусь домой, я постараюсь включить свою регистрационную информацию. – MrTimotheos

ответ

0

Вы можете проверить, если это работает для вас:

InputStream in = new java.net.URL(downloadURL).openStream(); 
Bitmap avatarBmp = BitmapFactory.decodeStream(in); 
in.close(); 

Также напоминание, чтобы добавить это в манифесте

<uses-permission android:name="android.permission.INTERNET" /> 
0

я имел в прошлом глупые проблемы, как с моим поток достиг конец до того, как я его расшифровал, поэтому убедитесь, что оно установлено до 0 перед декодированием потока

например.

stream.Position = 0; 
var bmp = BitmapFactory.DecodeStream(stream); 
0

документация Javadoc для Bitmap.decodeStream() гласит:

Если входной поток имеет нулевое значение, или не может быть использована для декодирования растрового изображения, функция возвращает нулевое

Ты передавая ему результаты URL.getContent(), которые указаны в его javadoc:

По умолчанию это возвращает InputStream или null, если тип содержимого ответ неизвестен.

Возможно, вы должны проверить, не getContent() возвращает null, прежде чем передавать его на декодер.

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