2014-03-26 43 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。它對我來說效果很好,而且使用起來非常簡單。

相關問題