gpt4 book ai didi

android - 从 SD 卡检索图像时无法恢复 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:16 26 4
gpt4 key购买 nike

我的 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();

在 Activity 恢复时发生:

03-14 14:06:48.380: E/AndroidRuntime(20793): java.lang.RuntimeException: Unable to resume activity {}: java.lang.RuntimeException: Unable to resume activity {}: android.database.StaleDataException: Attempted to access a cursor after it has been closed.

它只发生在 Android 4.0 上。如果在 Android 2.x 或 3.x 上,它可以正常工作。但是,如果我更改系统设置,在“开发人员选项”中选择“不保留 Activity ”选项。错误不显示。

我想在不更改系统设置的情况下修改我的代码以避免此错误。我应该怎么做?

最佳答案

我认为这是因为 managedQuery 调用 + 您关闭了游标。来自 managedQuery() 的文档方法:

Warning: Do not call close() on a cursor obtained using this method, because the activity will do that for you at the appropriate time. However, if you call stopManagingCursor(Cursor) on a cursor from a managed query, the system will not automatically close the cursor and, in that case, you must call close().

将光标留给Android系统管理,不要调用cursor.close();

注意: managedQuery 方法已弃用,应避免,实现CursorLoaders反而。有关 CursorLoaders 的更多信息,请访问 developer.android.com。 .

关于android - 从 SD 卡检索图像时无法恢复 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9696868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com