1

これは、ListActivity から選択されたイベントを表示するための私のコードです (eventsこれらすべてのイベントを含む ArrayList です)。

Uri viewUri = Uri.parse("content://com.android.calendar/events/" + events.get(position).id);
Intent l_intent = new Intent(Intent.ACTION_VIEW);
l_intent.putExtra("beginTime", Long.parseLong(events.get(position).startTime));
l_intent.putExtra("endTime", Long.parseLong(events.get(position).endTime));
startActivity(l_intent);

このコードは、定期的なイベントを除くすべてのイベントに対して完全に機能します。繰り返し発生するイベントの場合、endTime は null として返され、プログラムがクラッシュします。これを回避する方法を知っている人はいますか?私が渡す必要がある他のエキストラはありますか?

4

3 に答える 3

4

beginTime と endTime は、間違ったデータベース (確かにイベントデータベース) から取得したため、0/null になる可能性があります。代わりにインスタンスデータベースを使用する必要があります(例: SDK 8 の「content://com.android.calendar/instances/when/」)。

インスタンスDB では、すべての「実際の」イベントを取得します。ここでは、定期的なイベントごとに必要な数のインスタンスがあり、正しい開始と終了のタイムスタンプが含まれています。他のイベントも表示されます。これらのフィールド (event_id、begin、end) を読み取り、それらを使用してインテントを開くだけです。

于 2012-11-25T13:23:50.047 に答える
2

カレンダーのイベントを扱っているときに、calendar.db のイベント テーブルに、あなたが使用した通常のイベントの情報が格納されていることがわかりました。(Dtstart に startTime を、Dtend に endTime を使用していると思います)

ただし、再発イベントの場合、Dtend は null になります。したがって、この列は null になることはないため、代わりに lastDate 列を使用してください。通常のイベントだけでなく、再発イベントの場合にもうまく機能します。

ただし、繰り返しイベントに関する詳細情報が必要な場合は、@GeH で提案されているように、インスタンス テーブル (各発生の正確な開始時間と終了時間など) を使用します。

于 2012-12-05T16:26:53.947 に答える
0

null解析する前にチェックを入れたいと思うかもしれません:

long endTime = 0L;//use some default value
if( events.get(position).endTime != null)
     endTime = Long.parseLong(events.get(position).endTime);
}
l_intent.putExtra("endTime", endTime );
于 2012-11-23T16:28:16.663 に答える