Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: SkImageDecoder:: Factory returned null

Tags:

android

I'm using my localhost to fetch images and to view in an ImageView. For some reason I'm getting Factory returned null error. I've looked through the code many times and I don't see what's wrong. Any help would be appreciated!

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<Void, Void, Void> {         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 
like image 527
user1006896 Avatar asked Aug 17 '12 13:08

user1006896


1 Answers

I have encountered the same problem. And also I make sure the url is correct to download the image. By debugging the code, I found the variable of position in inputstream was set to 1024 after the first decode. So I add inputstream.reset() before the second decode. That works. Hope can help others.

like image 111
George Jia Avatar answered Sep 20 '22 14:09

George Jia