Не удалось возобновить ошибку Действия
My Activity содержит этот код для получения всех изображений на 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 он работает нормально. Но если я изменю системный параметр, который выбирает параметр "Не сохранять действия" в "Параметры разработчика".
Ошибка не отображается.
Я хочу изменить свой код, чтобы избежать этой ошибки, не изменяя настройки системы. Как мне это сделать?
Ответы
Ответ 1
Я думаю, это связано с вызовом managedQuery
+, закрывающим курсор. В документах метода managedQuery()
:
Предупреждение. Не вызывайте close() курсором, полученным с использованием этого метода, потому что деятельность сделает это для вас в соответствующее время. Однако, если вы вызываете stopManagingCursor (Курсор) на курсоре из управляемый запрос, система не будет автоматически закрывать курсор и, в этом случае вы должны вызвать close().
Оставьте курсор для системы Android для управления и не вызывайте cursor.close();
.
Note:
Метод managedQuery
устарел и его следует избегать, реализуйте CursorLoaders
. Более подробную информацию о CursorLoaders
можно найти на developer.android.com
.
Ответ 2
Функция, managedQuery() устарела.
Пожалуйста, используйте getContentResolver(). query().
Параметры одинаковы.
Ответ 3
удалите cursor.close();
в вашем коде
он отлично работает.