0

在我的应用程序中,我使用两个日历,可以说日历“业务”与CalendarContract.Events.CALENDAR_ID = 1,日历“私人”与CalendarContract.Events.CALENDAR_ID = 2

如果用户选择在我的应用程序中查看两个日历的事件,我需要以某种方式将两个日历的事件放入光标中。

我已经尝试过,就像在下面的代码中一样,我在我的选择中放入了带有 的 calendarIds OR,但这向我展示了数量惊人的事件。

所以我的问题是,如何获得带有两个日历事件的光标?

String[] projection = { CalendarContract.Events._ID,
            CalendarContract.Events.CALENDAR_ID,
            CalendarContract.Events.TITLE,
            CalendarContract.Events.DESCRIPTION,
            CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND,
            CalendarContract.Events.DURATION,
            CalendarContract.Events.DELETED };

SelectionArgs = new String[] { strCalendarStart,
                        strCalendarStop, "0",
                        intPrivateCalendarId.toString(),
                        intBeruflicheCalendarId.toString() };

selection = "((" + CalendarContract.Events.DTSTART + " >= ?) AND (" 
                        + CalendarContract.Events.DTEND + " <= ?)AND " + "("
                        + CalendarContract.Events.DELETED + " = ?) AND"
                        + "(" + CalendarContract.Events.CALENDAR_ID
                        + " = ?) OR" + "("
                        + CalendarContract.Events.CALENDAR_ID + " = ?))";

Cursor curCalendar = cr.query( CalendarContract.Events.CONTENT_URI,
                               projection, selection, SelectionArgs,
                               CalendarContract.Events.DTSTART + " ASC" );
4

1 回答 1

0

您是否尝试过在OR这样的周围添加括号?

selection = "((" + CalendarContract.Events.DTSTART + " >= ?) AND (" 
                        + CalendarContract.Events.DTEND + " <= ?)AND " + "("
                        + CalendarContract.Events.DELETED + " = ?) AND"
                        + "((" + CalendarContract.Events.CALENDAR_ID
                        + " = ?) OR" + "(" 
                        + CalendarContract.Events.CALENDAR_ID + " = ?)))";

由于我认为OR' 的优先级较低,因此您的代码将返回日历 1 中未删除的事件等以及日历 2 中的所有事件。

我不完全确定,但也许值得一试。我希望这个答案能有所帮助。祝你今天过得愉快。

于 2015-07-15T16:23:09.613 回答