Получение нулевого растрового изображения при загрузке его из URL в цикле for - PullRequest
0 голосов
/ 19 января 2012

Я использую следующий фрагмент кода для загрузки URL-адреса в растровый цикл for. Иногда он дает нулевое значение для растрового изображения. Так что может быть правильным решением для получения растрового значения для каждого цикла ??

for (int i = 0; i < len; i++) {
        String url = "image url"+i;
        try {
            URL url2 = new URL(url);
            InputStream inputStream = url2.openConnection()
                    .getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
            Log.i("@@@@@@@@@@ bitmap", "" + bitmap);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Ответы [ 2 ]

2 голосов
/ 19 января 2012

InputStream может иметь проблемы, когда сетевое соединение нестабильно, что приводит к нулевому возвращаемому значению для BitmapFactory.decodeStream (). Я также сталкивался с этой проблемой.Алго создал класс FlushedInputStream, который решает мою проблему, он может помочь вам

 static class FlushedInputStream extends FilterInputStream {
    public FlushedInputStream(InputStream inputStream) {
        super(inputStream);
    }

    @Override
    public long skip(long n) throws IOException {
        long totalBytesSkipped = 0L;
        while (totalBytesSkipped < n) {
            long bytesSkipped = in.skip(n - totalBytesSkipped);
            if (bytesSkipped == 0L) {
                int b = read();
                if (b < 0) {
                    break;  // we reached EOF
                } else {
                    bytesSkipped = 1; // we read one byte
                }
            }
            totalBytesSkipped += bytesSkipped;
        }
        return totalBytesSkipped;
    }
}

оригинальное сообщение: Android decoder-> decode, возвращенное false для загрузки растрового изображения

0 голосов
/ 19 января 2012

Друзья ... У меня есть решение для этого ... Я только что добавил несколько строк следующим образом ... это хорошо работает ....

for (int i = 0; i < len; i++) {
        String url = "image url";
        try {
            URL url2 = new URL(url);
            InputStream inputStream = url2.openConnection()
                    .getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
            Log.i("@@@@@@@@@@ bitmap", "" + bitmap);
            if(bitmap== null) {
                i--;
                continue;
            }
            bitmap_array.add(bitmap);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

EDIT:

Еще одна вещь, которую вам нужно добавить, это проверить сетевое соединение в цикле.

и Также проверьте, что inputStream имеет значение null или нет, там вы можете разорвать цикл.

...