2011-11-29 26 views
5

Cuando intento cargar una imagen desde una URL, usando el siguiente código (ruta de la imagen verdadera eliminado):Error al leer el png.class

Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://some-path/img.png").getContent()); 

recibo el siguiente error:

Error reading from ./org/apache/harmony/awt/www/content/image/png.class 

¿Alguna idea sobre qué podría estar causando el error?

Estoy usando un GoogleTV AVD, si eso importa.

+0

es el código de respuesta del servidor 200 ? – rekire

+0

Sí. Confirmé que las URL son válidas. – Steve

+0

Utilicé un sniffer de paquetes solo para asegurarme, y las solicitudes de imágenes se están realizando, y se devuelve una respuesta de 200 con la imagen. – Steve

Respuesta

4

Espero que esto sea suficiente.

Si está utilizando php;

echo base64_encode($imgBinary); // You can get the imagebinary by using the fread and fopen methods provided by php 

en android:

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(new HttpGet(url)); 
HttpEntity entity = httpResponse.getEntity(); 

if(entity != null) { 
InputStream is = entity.getContent(); 
byte[] decodedString = Base64.decode(convertStreamToString(is), Base64.DEFAULT); 
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
} 

Esto no es probablemente la manera más eficiente, pero debe hacer el trabajo. A partir de ahí puede construir :)

Puede comprimir el mapa de bits en un PNG después, y seguro. ejemplo:

decodedByte.compress(compressformat, quality, stream);//suported compress formats can be used like so: Bitmap.CompressFormat.PNG etc 

convertStreamToString se encuentran fácilmente métodos. Simplemente haz una búsqueda rápida en Google o escribe la tuya.

2

Pruebe este método: su trabajo para mí Esto devuelve mapa de bits

bmp=getBitmapFromURL(ur url here); 

escribir este método

public static Bitmap getBitmapFromURL(String src) { 
     try { 

      URL url = new URL(src); 
      HttpURLConnection connection = (HttpURLConnection) url 
        .openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap mybitmap = BitmapFactory.decodeStream(input); 

      return mybitmap; 

     } catch (Exception ex) { 

      return null; 
     } 
0

Por lo que yo he experimentado el escenario como la suya me encontré con que el flujo de entrada para una No se puede obtener la imagen por métodos simples de transmisión. Intente actualizar las siguientes cosas en su código y luego verifique los resultados. Estoy seguro de que obtendrás lo que quieres.

Bitmap bitmap = BitmapFactory.decodeStream(getBitmapStream("http://some-path/img.png")); 

y aquí está el método que puede ser declarado dentro de la clase de ser llamado directamente en su método de flujo de decodificación

public InputStream getBitmapStream (String url) 
{ 
    HttpGet httpRequest = null; 
    InputStream instream=null; 
    try { 
     URL bitmapUrl=new URL(url); 
      httpRequest = new HttpGet(bitmapUrl.toURI()); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response = (HttpResponse) httpclient.execute 
    (httpRequest); 

      HttpEntity entity = response.getEntity(); 
      BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity 
    (entity); 
      instream = bufHttpEntity.getContent(); 
    } catch (URISyntaxException e) { 
      e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    return instream; 
} 
0

Mi conjetura sería

URL url = new URL("some url path"); 
URLConnection urlConnection = url.openConnection(); 
BitmapDrawable image = new BitmapDrawable(urlConnection.getInputStream()); 
Cuestiones relacionadas