2014-03-26 44 views
0

我在我的应用程序中有一个画廊,有大图像。我跟着this guide将大图片缩小到不在OOM例外中运行。这适用于Android 2.3+。但由于某些原因,它在Android 2.2中失败。我发现返回的位图是null!?BitmapFactory.decodeResource在Android 2.2上给出了空值

这是代码:

protected static Bitmap decodeSampledBitmapFromResource (Resources res, 
                 int resId, 
                 int reqWidth, 
                 int reqHeight) 
{ 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeResource (res, resId, options); 

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize (options, 
                reqWidth, 
                reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeResource (res, resId, options); 
} 

该项目上github托管,如果你想检查的其他代码。

的logcat:

03-26 13:57:17.724: E/AndroidRuntime(1100): FATAL EXCEPTION: AsyncTask #2 
03-26 13:57:17.724: E/AndroidRuntime(1100): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.lang.Thread.run(Thread.java:1096) 
03-26 13:57:17.724: E/AndroidRuntime(1100): Caused by: java.lang.NullPointerException: key == null || value == null 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at android.support.v4.util.LruCache.put(LruCache.java:117) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at com.finger.sciencequiz.MainActivity.addBitmapToMemoryCache(MainActivity.java:84) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at com.finger.sciencequiz.BitmapWorkerTask.doInBackground(BitmapWorkerTask.java:46) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at com.finger.sciencequiz.BitmapWorkerTask.doInBackground(BitmapWorkerTask.java:1) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-26 13:57:17.724: E/AndroidRuntime(1100):  ... 4 more 
+2

所以你传递null作为键或值:“key == null || value == null”,所以在MainActivity行84中改变该值。 – WarrenFaith

+0

是的,值是位图(它是空的)。但它不在Android 2.3以上,我不知道为什么!? – Bhil

回答

0

我结束了使用Picasso。它对我来说效果很好,而且使用起来非常简单。