Androidの下でgoogleapi-client-javaを使ってgoogle calendarを操作する(二)


3.サーバとのデータ対話:
インタラクションはHTTPリクエストと応答によって行われる.データはxmlによってAtomプロトコル(http://www.ietf.org/rfc/rfc4287.txt)も参照してください.
Atomプロトコル形式で:
     Googleのカレンダーデータはfeedをルートノードとしてパッケージ化して返され、各feedには複数のentryが含まれ、各entryはカレンダーである.
     同様に、カレンダー内のイベントもfeedをルートノードとしてパッケージ化され、各feedには複数のentryが含まれ、各entryはカレンダー内のイベントです.
     ライブラリ関数は、インタラクティブなプロシージャをカプセル化します.関数要求をHTTP要求に変換し、返されたXMLデータをオブジェクトに解析することを含む.
     XMLデータをオブジェクトに解析するには、カレンダーfeed、カレンダーentry、イベントfeed、イベントentryなどのオブジェクト定義を含むデータモデルを定義する必要があります.
     このオブジェクトはユーザーによって定義されていますが、ライブラリ関数はXMLデータを解析してどのデータメンバーに保存するかをどのように知っていますか?
     コードを追跡し、そのメカニズムを簡単にまとめます.
     XMLのデータは各メンバーに名前があります.例えばなどです.この名前に従ってJavaの反射メカニズムでオブジェクトのメンバー名を検索し、名前が一致すればこのメンバー変数に保存します.
     メンバーの名前はどのようにJVMに伝わりますか?Java annotationメカニズムによって実現され、関数ライブラリに@keyというannotationが定義されています.

@Key("content")
public String var;

変数varをcontentと名付け、ライブラリ関数でこの追加情報を取得できることを示すと、XMLのcontentnメンバーの値が解析されてvarに保存されます.
解析時に文字列を必要な値に変換する方法については、ライブラリ関数はvarのタイプを判断し、適切な生成関数を呼び出します.
3.1 Feedベースクラス:
   ATOMの約束によると、必ず以下を含む.
  、<updated> <br>  一般に複数の<link>も含まれますので、Feedベースクラスのメンバー定義は次のとおりです.<pre><code name="code"> @Key("id") public String id; @Key("title") public String title; @Key("updated") public String updated; @Key("link") public List<Link> links; </code></pre> <br>id、title、updateなどの情報に注目しない場合は、これらのメンバーを定義しなくてもよい.<br>Linkは、<link>ノードの情報を格納するカスタムクラスでもあり、メンバー定義は次のとおりです.<pre><code name="code"> @Key("@href") public String href; @Key("@rel") public String rel; </code></pre> <br>Feedには<entry>も含まれ、Calendar feedの各entryはカレンダーであり、Event feedの各entryはイベントである.<br>2つのクラスentryのメンバーが異なるため、ここにはentryメンバーは含まれず、拡張Feedクラスで定義されています.<br>3.2 Entryベースクラス:<br>  必然的に:<id>、<title>、<updated><br>  最大1つの<content>を含む可能性があります.<br>  最大1つの<summary>を含む場合があります.<br>  一般的には複数の<link>も含まれます.<br>  Entryベースクラスのメンバー定義は次のとおりです.<br>  <pre><code name="code"> @Key public String summary; @Key public String content; @Key public String id; @Key public String title; @Key public String updated; @Key("link") public List<Link> links; </code></pre> <br>3.3 CalendarFeedクラス:<pre><code name="code"> @Key("entry") public List<CalendarEntry> calendars = new ArrayList<CalendarEntry>(); </code></pre> <br>entryを保存するリストを拡張します.リストの各項目はentryです.<br>3.4 EventFeedクラス:<pre><code name="code"> @Key("entry") public List<EventEntry> events = new ArrayList<EventEntry>(); </code></pre> <br>3.5 CalendarEntryクラス:<br>  いくつかの操作インタフェースしか拡張されていません.<br>3.6 EvernentEntryクラス:<pre><code name="code"> @Key("gd:when") public When when; </code></pre> <br>時間プロパティが拡張されました.