Android: SkImageDecoder :: Factory devuelto nulo

Estoy usando mi servidor local para buscar imágenes y verlas en un ImageView. Por algún motivo, estoy obteniendo un error nulo de Factory. He revisado el código muchas veces y no veo lo que está mal. ¡Cualquier ayuda sería apreciada!

GalleryZoom.java

public class Zoom extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.gallery_zoom); String selection = getIntent().getExtras().getString("image"); Toast.makeText(this, selection, Toast.LENGTH_LONG).show(); new backgroundLoader().execute(); } private class backgroundLoader extends AsyncTask { Bitmap bmp; @Override protected Void doInBackground(Void... params) { bmp = DecodeBitmapSampleSize(getIntent().getExtras().getString("image"), 48, 64); return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); ImageView image = (ImageView) findViewById(R.id.imageZoom); image.setImageBitmap(bmp); } } public Bitmap DecodeBitmapSampleSize (String strURL, int reqWidth, int reqHeight) { InputStream in = null; Bitmap bmp = null; in = OpenHttpConnection(strURL); final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(in, null, options); options.inSampleSize = calculateSampleSize(options, reqWidth, reqHeight); options.inJustDecodeBounds = false; bmp = BitmapFactory.decodeStream(in, null, options); return bmp; } private InputStream OpenHttpConnection(String strURL) { try { URL url = new URL(strURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); InputStream in = new BufferedInputStream(connection.getInputStream()); return in; } catch (Exception exception) { exception.printStackTrace(); return null; } } public static int calculateSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int width = options.outWidth; final int height = options.outHeight; int inSampleSize = 1; if (width > reqWidth || height > reqHeight) { if (width > height) { inSampleSize = Math.round((float) height / (float) reqHeight); } else { inSampleSize = Math.round((float) width / (float) reqWidth); } } return inSampleSize; } } 

LogCat Log

 08-13 21:55:19.578: I/MemoryCache(3197): MemoryCache maximum limit is 6MB 08-13 21:55:19.658: I/MemoryCache(3197): cache size = 24600, length = 1 08-13 21:55:19.688: I/MemoryCache(3197): cache size = 24600, length = 1 08-13 21:55:19.708: I/MemoryCache(3197): cache size = 24600, length = 1 08-13 21:55:19.708: I/MemoryCache(3197): cache size = 24600, length = 1 08-13 21:55:20.628: I/MemoryCache(3197): cache size = 71600, length = 2 08-13 21:55:20.678: I/MemoryCache(3197): cache size = 101408, length = 3 08-13 21:55:26.228: I/MemoryCache(3197): MemoryCache maximum limit is 6MB 08-13 21:55:26.228: I/MemoryCache(3197): MemoryCache maximum limit is 6MB 08-13 21:55:26.998: D/skia(3197): --- SkImageDecoder::Factory returned null 

He encontrado el mismo problema. Y también me aseguro de que la URL sea correcta para descargar la imagen. Al depurar el código, encontré que la variable de posición en inputstream se estableció en 1024 después de la primera deencoding. Entonces agrego inputstream.reset () antes de la segunda deencoding. Eso funciona. Hope puede ayudar a otros.

Hola chicos, después de mirar alrededor obtuve la mejor solución. como #jia George señala que restableció la intensidad de entrada después de la primera deencoding, el problema es que no es posible reiniciarlo alguna vez, pero puede ajustar el flujo de entrada dentro de un BufferedInputStream y este está bien.

 final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BufferedInputStream buffer=new BufferedInputStream(is); BitmapFactory.decodeStream(buffer,null,options); buffer.reset(); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth,reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; BitmapFactory.decodeStream(buffer,null,options); 

Este podría ser un caso raro, pero para aquellos que usan Picasso , verá este error si intenta cargar una imagen desde la URL, pero la URL no se refiere a una imagen.

Por ejemplo:
http://www.google.ca
en lugar de:
http://sofes.miximages.com/android/googlelogo_color_272x92dp.png

Tuve un problema similar al leer un flujo de un Intento devuelto de la aplicación de la galería. inputstream.reset () arroja una IOException, como Shellum menciona arriba, así que lo resolví cerrando la transmisión y volviéndola a abrir. Simple, y lo hizo el truco.

Como arriba con Picasso, asegúrese de que su URL sea correcta, simplemente copie y pegue el enlace de su progtwig de desarrollo en su navegador web

Escribí:

http://lorepixel.com/600/400/city

en lugar de

http://lorempixel.com/600/400/city