Загрузить изображение из URL, используя цикл - PullRequest
0 голосов
/ 27 января 2012

Я использую этот код для загрузки изображения с сервера:

public Bitmap getBitmap(String path){
    URL url=new URL(path);
    URLConnection connection=url.openConnection();
    connection.setDoInput(true);
    connection.connect();
    InputStream is=connection.getInputStream();
    Bitmap bmp=BitmapFactory.decodeStream(is);
    return bmp;
}

Он отлично работает для 1 изображения, но если я использую это в цикле, на второй, третьей и т. Д. Итерациях он возвращает что-то странное (поля mWidth и mHeight растрового изображения -1). Где может быть проблема?

(path на второй, третьей и т. Д. Итерации в порядке, я проверил это)

EDIT

Пример цикла:

//images - is a String array
for(int i=0; i<images.length(); i++){
    Bitmap bmp=getBitmap(images[i]);
}

Как видите, в этом цикле нет ничего необычного

1 Ответ

1 голос
/ 27 января 2012

Попробуйте позвонить Bitmap.recycle после того, как вы закончили с одним растровым изображением, но перед загрузкой следующего.

Проблема в том, что даже если это не поможет, растровые изображения не могут изменить свой размер.

Может быть, лучше создать массив растровых изображений - один на любой путь.

Боюсь, что Java-машина (или компилятор) из-за оптимизации не разрушает предыдущее растровое изображение, а пытается его повторно использовать.Пожалуйста, напишите здесь о результатах.Это интересно.

попробуйте прочитать размер изображений, не читая их:

    BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;

Bitmap btemp = BitmapFactory.decodeFile(selectedImagePath,options);

после этого используйте приведенный ниже код для получения высоты и ширины:

     options.outHeight     for height
      options.outWidth    for width

Что вы видите?

Попробуйте изменить порядок путей - опять только первый будет в порядке?Если нет, проблема в файлах.Если да, то в соединении / потоке / фабрике.

...