我也一直在尝试更多地了解 ContentUris,因为我有一段代码在 CalendarContract Instances 表中不起作用。这很奇怪,因为我不需要为我开发的日历或事件表查询传递这些信息。
因此,我添加了 appendId 语句,并以 UTC 格式为两个值传递了当前时间,代码现在可以工作了。我的代码中的实际查询是使用当前时间来查找当前事件 - 请参阅下面的代码。如果我取出 appendID 语句,则会引发异常 - 我认为它类似于找不到内容提供程序 URL。
String instanceQuery = "EVENT_ID = " + event_id +
" AND begin <= " + now +
" AND end >= " + now;
Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(eventsUriBuilder, now);
ContentUris.appendId(eventsUriBuilder, now);
Uri eventsUri = eventsUriBuilder.build();
Cursor instanceCursor = null;
instanceCursor = ctx.getContentResolver().query(eventsUri,
new String[] { CalendarContract.Instances.EVENT_ID,
CalendarContract.Instances.BEGIN,
CalendarContract.Instances.END},
instanceQuery,
null,
null);
我的代码正在运行,但我想知道 appendID 语句实际上有什么影响,例如这些值是否添加了任何约束。看起来我的实际查询覆盖了传入的任何隐含范围,我真的不明白为什么需要它们。
希望更了解这一点的人的简短解释将使开发人员社区受益......