getContentResolver查询原因CursorWrapperInner警告(getCont

2019-06-27 05:38发布

在4.0.3,代码如下原因警告 “W / CursorWrapperInner(11252):没有事先敲定接近光标()”。

    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    getContentResolver().query(uri, null, null, null, null);

在SORCE,我发现它来自何方,谁能告诉我如何避免,因为我怀疑这涉及到一些奇怪的问题,警示?

Answer 1:

我也遇到过这个奇怪的问题。 我使用ContentProvider的给我提供光标和CursorLoader处理取我的片段/活动。 所以我做的一切“书”。

我经历使用4.1.1设备此警告消息,但它似乎对我的Nexus 7,其在4.2至已经消失。 我个人不会采取这一警告的任何严重的通知。

更新:我测试我的代码与Android V2.2和我从这个错误中一个完整的堆栈跟踪。 原来,我的代码是获取另一个光标(使用装载机不是一个牵强),它是这样的,这是有问题的代码。 关闭这个手工做的伎俩。



Answer 2:

这行代码返回游标对象:

getContentResolver().query(uri, null, null, null, null);

很奇怪,你正在执行一个查询,但忽略结果。 执行查询的唯一目的是为了获得在游标的结果。 你应该存储到像这样的变量:

Cursor cursor = getContentResolver().query(uri, null, null, null, null);

然后,你可以使用光标得到你需要的任何数据,当你用它做致电:

cursor.close();

您可以关闭光标在Activity#onDestroy()或更早的版本,但在此之前的活动完全结束,你必须关闭它,否则你会看到这样的警告。 这是因为游标被另一个进程的内存支持,你不想泄露内存。



文章来源: getContentResolver query cause CursorWrapperInner warning