8

イベントを取得するために、Android のイベント テーブルにクエリを実行しています。

String[] projection = new String[] { "calendar_id", "title", "description",
                    "dtstart", "dtend", "eventLocation" };

Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/events"),
                    projection,
                    null,
                    null,
                    null);

これにより、すべてのイベントが返されます。しかし、今では、2013 年 4 月 3 日から 2013 年 7 月 3 日までの特定の期間のイベントのみが必要です。とをどのように使用selectionselectionArgs[]ますか? 私はこれを試しました

String selection = "((dtstart <= ?) AND (dtend >= ?))";
String[] selectionArgs = new String[] {startString, endString};

しかし、何も返されません。私の疑問は 1. Where 句は機能しますか? startDate と endDate は最初に long (ミリ秒) に変換され、次に String に変換されてからテーブルに格納されるためです。では、文字列の長い値を比較するにはどうすればよいでしょうか。toNumber()sqlite には機能がありません。2.合格する場合selectionArgsstartStringどのendString形式にする必要がありますか?

4

1 に答える 1

8

startString&endStringはミリ単位で渡す必要があります。使用してみてください:

Calendar c_start= Calendar.getInstance();
c_start.set(2013,2,4,0,0); //Note that months start from 0 (January)   
Calendar c_end= Calendar.getInstance();
c_end.set(2013,2,7,0,0); //Note that months start from 0 (January)

また、論理が逆になっていると思います。日付範囲は次のようにする必要があります。

String selection = "((dtstart >= "+c_start.getTimeInMillis()+") AND (dtend <= "+c_end.getTimeInMillis()+"))";
于 2013-03-18T14:02:24.270 に答える