Android getContentResolver查询导致CursorWrapperInternal警告

Android getContentResolver查询导致CursorWrapperInternal警告,android,cursor,warnings,Android,Cursor,Warnings,在4.0.3中,下面的代码导致警告“W/CursorWrapperInner(11252):未事先关闭()的情况下完成光标” 不幸的是,我发现了警告的来源,有人告诉我如何避免,因为我怀疑它与一些奇怪的问题有关吗 这行代码返回一个游标对象: getContentResolver().query(uri, null, null, null, null); 奇怪的是,您正在执行查询,但忽略了结果。执行查询的唯一目的是在游标中获取结果。您应该将其存储到一个变量中,如下所示: Cursor cursor

在4.0.3中,下面的代码导致警告“W/CursorWrapperInner(11252):未事先关闭()的情况下完成光标”

不幸的是,我发现了警告的来源,有人告诉我如何避免,因为我怀疑它与一些奇怪的问题有关吗


这行代码返回一个游标对象:

getContentResolver().query(uri, null, null, null, null);
奇怪的是,您正在执行查询,但忽略了结果。执行查询的唯一目的是在游标中获取结果。您应该将其存储到一个变量中,如下所示:

Cursor cursor = getContentResolver().query(uri, null, null, null, null);
然后,您可以使用光标获取所需的任何数据,并在完成后调用:

cursor.close();

您可以在
活动#onDestroy()
或更早版本中关闭光标,但必须在活动完全完成之前将其关闭,否则您将看到此警告。这是因为在另一个进程中,游标由内存支持,您不想泄漏该内存。

我也遇到过这个奇怪的问题。我正在使用ContentProvider为我提供一个游标和一个游标加载程序来处理片段/活动中的获取。所以我做的每件事都是“为了书本”

我在使用4.1.1设备时体验到了这条警告消息,但在我的Nexus7(4.2)上它似乎已经消失了。就我个人而言,我不会认真注意这一警告

更新:
我正在用Android v2.2测试我的代码,从这个错误中得到了完整的堆栈跟踪。事实证明,我的代码正在获取另一个游标(不是使用加载程序获取的游标),而这正是有问题的代码。手动关闭此按钮就成功了。

您有没有发现这一点?我也有类似的问题。我的代码中没有
光标
,我完全被错误弄糊涂了。不,对不起。正如你所看到的,没有回复。
cursor.close();