选择日历事件查询

问题描述:

我尝试读出特定日历中的事件。以下是我尝试使用的代码。但我不知道选择的样子。我想为选择使用日历ID。没有选择(空)它读出所有的日历,但我只想要一个。 查询看起来像这样:选择日历事件查询

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 

选择:
的过滤声明返回哪些行,格式化为SQL WHERE子句(不包括WHERE本身)。传递null将返回给定URI的所有行。

此代码是第一次尝试与选择:

  Uri.Builder builder = Instances.CONTENT_URI.buildUpon(); 
      ContentUris.appendId(builder, now - DateUtils.DAY_IN_MILLIS); 
      ContentUris.appendId(builder, now + DateUtils.DAY_IN_MILLIS); 

      Cursor mCursor = null; 
      final String[] projection = new String[] 
      { CalendarContract.Events.TITLE, CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND}; 

      mCursor = getContentResolver().query(
       builder.build(), projection, Instances._ID + calendarID, null, null); 
       mCursor.moveToFirst(); 

那是错误从上面的代码:

09-29 00:07:41.800: E/AndroidRuntime(14507): FATAL EXCEPTION: TweetCollectorTimer 
09-29 00:07:41.800: E/AndroidRuntime(14507): android.database.sqlite.SQLiteException: no such column: _id3: , while compiling: SELECT title, dtstart, dtend FROM Instances INNER JOIN view_events AS Events ON (Instances.event_id=Events._id) WHERE (begin<=? AND end>=?) AND (_id3) 
09-29 00:07:41.800: E/AndroidRuntime(14507): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179) 
09-29 00:07:41.800: E/AndroidRuntime(14507): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
09-29 00:07:41.800: E/AndroidRuntime(14507): at android.content.ContentProviderProxy.query(ContentProviderNative.java:358) 
09-29 00:07:41.800: E/AndroidRuntime(14507): at android.content.ContentResolver.query(ContentResolver.java:311) 
09-29 00:07:41.800: E/AndroidRuntime(14507): at de.ring.AppService$1.run(AppService.java:96) 
09-29 00:07:41.800: E/AndroidRuntime(14507): at java.util.Timer$TimerImpl.run(Timer.java:284) 

编辑:

非常感谢,我改变了它到:

  mCursor = getContentResolver().query(
        builder.build(), projection, Instances.CALENDAR_ID + " = ?", 
        new String[]{""+calendarID}, null); 

重要的是使用CALENDAR_ID而不仅仅是_ID。

+0

我解决了你的问题,然后你改变了另一个错误的问题!你应该发布一个新的错误与新的错误! – confucius

+0

对不起,错误不是真实的,我只是使用了错误的ID,所以我得到了这个错误。我改变了解决方案的EDIT。 – user1390816

使这个

getContentResolver().query(
        builder.build(), projection, Instances._ID + "=?", 
new String[]{""+calendarID}, null); 

,而不是这个

getContentResolver().query(
       builder.build(), projection, 
Instances._ID + calendarID, null, null); 

,因为第三个参数需要选择字符串,你通过这个Instances._ID + calendarID将评估这一

SELECT ........ WHERE _id3; 

它将日历ID的编号附加到列名称上。