3

特定のカレンダーからイベントを読み上げようとしています。以下は私が使おうとしているコードです。しかし、私は選択がどのように見えるべきかわかりません。選択にカレンダーIDを使用したい。選択(null)がないと、すべてのカレンダーが読み取られますが、必要なのは1つだけです。クエリは次のようになります。

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);

_IDだけでなくCALENDAR_IDを使用することが重要です。

4

1 に答える 1

2

これ作って

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

これの代わりに

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

3番目のパラメーターは選択文字列を受け取り、これを渡すため、Instances._ID + calendarIDこれに評価されます

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

カレンダーIDの番号を列名に追加します。

于 2012-09-29T08:34:46.997 に答える