Android Stock Calendar或android.content.ContentResolver.query()忽略selectionArgs

时间:2012-04-23 22:41:02

标签: android sql cursor provider

我使用旧设备上的非官方API从Stock Google Calendar获取事件。现在我重构代码以使用selection的{​​{1}}和selectionArgs而不是仅手动绑定android.content.ContentResolver.query()(它生成有效的SQL并在我的测试设备上运行[2.2和2.3] .3]没有问题)。

问题:如果我立即绑定参数(例如:selection),我的测试应用程序会返回预期的事件,但是当Android绑定时(例如:deleted = 0deleted = ?没有事件被返回。忽略String[] { "0" }的原因是什么?

LogCat显示没有错误。


示例(预期)

selectionArgs

返回255个事件,因为我的日历今年发生了255个事件。

示例(测试用例)

测试:摩托罗拉Milestone,CyanogenMod 7(Android 2.3.3)。

STATIC: cursor=225
DYNAMIC: cursor=255

我假设(但希望我做错了)Android或日历应用程序在绑定时失败。我发现了一个类似问题的错误报告,但我不确定日历应用程序是否受到影响:http://code.google.com/p/android/issues/detail?id=4467

代码

STATIC: cursor=225
DYNAMIC: cursor=0

1 个答案:

答案 0 :(得分:2)

CalendarProvider似乎有一个错误。

query的实现只会忽略用户提供的selectionArgs参数。

如果您比较Android 2.3.3Android 4.0.3中的实施,您会注意到他们添加了selectionArgs作为参数并构建了自己的combine并提供了用户的。

此处修复了错误:Support cleanup of Calendar.java