2

私が取り組んでいるコードは、カレンダーのイベントを一覧表示します。日付の範囲を制限する必要があります。例では、次のコードを参照してください。

// Construct the query with the desired date range.
Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, startMillis);
ContentUris.appendId(builder, endMillis);

appendId がこのように使用される理由がわかりません。startMillis と endMillis は ID ではありません。たとえば、 "startdate" のようにパラメーター名を指定する必要があると思います。なぜこれが機能するのか、この方法で指定できる他のパラメーターは不明です。appenedId でサポートされているパラメーターは他にもありますか? どうやって知ることが出来ますか?

4

2 に答える 2

3

appendId が実際に行うことは/#、URI に # が数字である a を追加することです。startMillis = 1000あなたの例では ( andendMillis = 3000と uriを仮定content://com.google.calendar/)、これはあなたの uri が次のようになることを意味します:

content://com.google.calendar/1000/3000

これは、uri パーサーが取得できるものです。

URIMatcher.addURI(AUTHORITY, calendar + "/#/#", DATE_RANGE);

簡単に言うと、appendId は、URI パスに整数を追加するための便利でタイプセーフな方法です。

于 2012-12-09T18:43:45.417 に答える
0

CalendarContract Instances テーブル内で機能しないコードのセクションがあったため、私も ContentUris についてもっと理解しようと努めてきました。私が開発した Calendars または Events テーブルのクエリにこれらを渡す必要がなかったため、これは奇妙です。

そのため、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 ステートメントが実際にどのような影響を与えるかを知りたいです。私の実際のクエリは、渡された暗黙の範囲をオーバーライドしているように見えますが、なぜそれらが必要なのか本当にわかりません。

これをもっと理解している人からの簡単な説明が開発者コミュニティに役立つことを願っています....

于 2013-08-21T06:22:09.777 に答える