Проблема декодирования BitmapFactory

url="http://www.nasa.gov/sites/default/files/styles/946xvariable_height/public/ladee_spin_2_in_motion_0_0.jpg?itok=yNhf69rE";

 try { 
                HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap bitmap = BitmapFactory.decodeStream(input);
                input.close();
                return bitmap;
            } 
            catch (Exception e) 
            { 
                e.printStackTrace(); 
                return null;
            }

Я пытался получить изображение из URL-адреса, но независимо от того, что он всегда возвращает ноль. В режиме отладки я заметил, что это происходит, когда он пытается input.close(); . Как я могу получить Image.


person Sunny    schedule 15.09.2013    source источник


Ответы (1)


Это правильный способ загрузки Bitmap:

    InputStream is;
    Bitmap bitmap;
    is = context.getResources().openRawResource(DRAW_SOURCE);


    bitmap = BitmapFactory.decodeStream(is);
    try {
        is.close();
        is = null;
    } catch (IOException e) {
    }

Однако, как я вижу, вы закрываете поток, прежде чем закончить его декодирование.

Если это так, используйте другой способ:

Bitmap bitmap;
InputStream input = connection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(input, 8192);

ByteArrayBuffer buff = new ByteArrayBuffer(64);
int current = 0;
while ((current = bis.read()) != -1) {
    buff.append((byte)current);
 }

  byte[] imageData = buff.toByteArray();
  bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

  try {
        is.close();
        is = null;
    } catch (IOException e) {
    }

Кстати, см. этот пост, он должен работать также

person Maxim Shoustin    schedule 15.09.2013