我的活動包含此代碼來獲取SD卡上的所有圖片:無法恢復活動時出現錯誤
String[] projection = {MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.ImageColumns.DATA};
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null,
MediaStore.Images.Media._ID);
int count = cursor.getCount();
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int i;
for(i = 0; i < count; i++) {
cursor.moveToPosition(i);
String p = cursor.getString(image_path_index);
fd.addToPhonePhoto(p);
}
cursor.close();
而活動是恢復
的發生:
03-14 14:06: 48.380:E/AndroidRuntime(20793):java.lang.RuntimeException:無法恢復活動{}:java.lang.RuntimeException:無法恢復活動{}:android.database.StaleDataException:嘗試訪問遊標之後關閉。
它只發生在Android 4.0上。如果在Android 2.x或3.x上,它可以正常工作。但是,如果我更改了「開發人員選項」中選擇「不保留活動」選項的系統設置。 錯誤不顯示。
我想修改我的代碼以避免此錯誤而不更改系統設置。我應該怎麼做?
你的回答是對的。但我的另一項活動也有同樣的錯誤。代碼像這樣http://stackoverflow.com/questions/9426170/why-the-cusor-null。如果沒有調用cursor.close(),則在運行多個循環時,cousor將會得到空值。如何避免它? – brian 2012-03-14 07:03:53
@brian也許你的另一個問題的問題是因爲你做的操作的大小。你可以完全查詢MediaStore.Images.Media'的兩列,然後製作幾百(甚至超過1000)'managedQuery'來獲取縮略圖(同樣,如果你希望縮略圖不應該查詢'MediaStore .Images.Thumbnails' contentprovider?)。另外你說遊標有時候是空的,但是不會在遊標上調用關閉引發'NullPointerException'? – Luksprog 2012-03-14 07:37:19
例如,我有2000張照片。從1到1000的for循環有效,但超過1000會變爲空。如果使用NullPointerException可能導致多張照片未被打開。 – brian 2012-03-14 07:53:56