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が定義されています.
変数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>時間プロパティが拡張されました.
インタラクションは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のデータは各メンバーに名前があります.例えば
メンバーの名前はどのようにJVMに伝わりますか?Java annotationメカニズムによって実現され、関数ライブラリに@keyというannotationが定義されています.
@Key("content")
public String var;
変数varをcontentと名付け、ライブラリ関数でこの追加情報を取得できることを示すと、XMLのcontentnメンバーの値が解析されてvarに保存されます.
解析時に文字列を必要な値に変換する方法については、ライブラリ関数はvarのタイプを判断し、適切な生成関数を呼び出します.
3.1 Feedベースクラス:
ATOMの約束によると、必ず以下を含む.