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