4

google-api-java-client を使用して、ユーザーの Google カレンダーでイベントの開始時刻と終了時刻を解析するにはどうすればよいでしょうか?

このサンプル Android プロジェクトを Google コードからインストールした後、Google カレンダーにアクセスして一部の情報 (すべてのカレンダー、イベント名、公開日時、概要など) を解析できますが、一生できません。イベントの開始時刻と終了時刻を取得します。

コードの私の理解はそのようなものです。

メイン アクティビティ クラス (CalendarAndroidSample.java) 内で、これは各カレンダーのタイトルを取得するメソッドです。

void executeRefreshCalendars() {
String[] calendarNames;
List<CalendarEntry> calendars = this.calendars;
calendars.clear();
try {
  CalendarUrl url = CalendarUrl.forAllCalendarsFeed();
  // page through results
  while (true) {
    CalendarFeed feed = client.executeGetCalendarFeed(url);
    if (feed.calendars != null) {
      calendars.addAll(feed.calendars);
    }
    String nextLink = feed.getNextLink();
    if (nextLink == null) {
      break;
    }
  }
  int numCalendars = calendars.size();
  calendarNames = new String[numCalendars];
  for (int i = 0; i < numCalendars; i++) {
    calendarNames[i] = calendars.get(i).title;
  }
} catch (IOException e) {
  handleException(e);
  calendarNames = new String[] {e.getMessage()};
  calendars.clear();
}

上記の for ループは、アカウント内の各カレンダーのタイトルを文字列配列「calendarNames[]」に割り当てています。

ここで見つかったプロジェクト内の別の Java ファイル (Entry.java) 内で、@Key 注釈がコードに XML 要素を解析するように指示し、文字列の名前が要素の名前と一致する必要があることがわかりました。

public class Entry implements Cloneable {

@Key
public String summary;

@Key
public String title;

@Key
public String updated;

@Key
public String published;

@Key("link")
public List<Link> links;

@Override
protected Entry clone() {
  try {
    @SuppressWarnings("unchecked")
    Entry result = (Entry) super.clone();
    Data.deepCopy(this, result);
    return result;
  } catch (CloneNotSupportedException e) {
    throw new IllegalStateException(e);
  }
}

String getEditLink() {
  return Link.find(links, "edit");
}
}

そう....

  @Key
  public String published;

...「published」という名前の XML 内の要素を検索し、その要素の値を文字列に割り当てます。

したがって、最初に参照された Java メソッド executeRefreshCalendars() (CalendarAndroidSample.java 内) に戻り、

calendarNames[i] = calendars.get(i).title;

calendarNames[i] = calendars.get(i).published;

イベントが公開された日付を教えてくれます。

このコードを理解する上での問題は、イベントの開始時間と終了時間のデータが 2 つの部分を持つ XML 要素内にあることだと思います。

これを行う方法について洞察を得るのを手伝ってくれる人はいますか? 私はブラウザで 10 個以上のタブを開いていますが、これに関するヘルプを求めて SO のあらゆる場所を調べました。私を助けるのに最も近いのはこの投稿ですが、サンプル プロジェクトでそれを実装する方法がわかりません。と働いています。

ありがとう。

4

1 に答える 1

3

EventFeed を使用して、EventEntry クラスを確認する必要があります。

http://code.google.com/p/google-api-java-client/source/browse/calendar-v2-atom-oauth-sample/src/com/google/api/client/sample/calendar/v2/ model/EventEntry.java?repo=サンプル

startTime / endTime を含む返される Atom 文字列は次のようになります。

<gd:when startTime='2010-03-13T14:00Z' endTime='2010-03-13T14:30Z'/>

次のように EventEntry クラスでモデル化されています。

@Key("gd:when")
public When when;

( @Key アノテーションを使用してマップされた When オブジェクトのプロパティ)

When オブジェクトは、When オブジェクトの start/endTime 属性をモデル化します

@Key("@startTime")
public DateTime startTime;

@Key("@endTime")
public DateTime endTime;

eventFeed と対話するときのクライアント コードは次のようになります。

EventEntry event = eventFeed.get(0);
DateTime start = event.when.startDate;
于 2011-06-09T21:06:07.840 に答える