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
所以你傳遞null作爲鍵或值:「key == null || value == null」,所以在MainActivity行84中改變該值。 – WarrenFaith
是的,值是位圖(它是空的)。但它不在Android 2.3以上,我不知道爲什麼!? – Bhil