キーと値のペアの取得
KiiObject からキーと値のペアを取得するには、KiiObject
クラスの getInt()
、getString()
などのメソッドを呼び出します。Kii Cloud SDK for Android でサポートしている型の数だけ getter メソッドのバリエーションがあります。
getter メソッドの引数には、取得するキー名を指定します。JSON ドキュメントから、指定した第 1 階層のキーの値が読み込まれます。
以下に JSON ドキュメントのサンプルと、その JSON ドキュメントから値を取得するためのサンプルコードを示します。サンプルコードのコメントは、取得できた値を表します。KiiObject の取得処理まで含む完全なコードは、下記の 基本データ型の取得 を参照してください。
{
"score": 987,
"premiumUser": false,
"mode": "easy"
}
int score = object.getInt("score"); // score=987
String mode = object.getString("mode"); // mode="easy"
boolean premiumUser = object.getBoolean("premiumUser"); // premiumUser=false
第 2 階層より深い位置の値を読み込みたい場合は、第 1 階層を JSON オブジェクトとして取得してください。
デフォルト指定での読み込み
getter メソッドには、指定されたキーがない場合や、型変換などで値の取得がエラーになった場合に、指定されたデフォルト値を取得できるものがオーバーロードされています。ただし、一部のデータ型ではデフォルト値を指定できません。
以下に JSON ドキュメントのサンプルと、その JSON ドキュメントから値を取得するためのサンプルコードを示します。サンプルコードのコメントは、取得できた値を表します。
{
"score": 987,
"premiumUser": false,
"mode": "easy"
}
int data1 = object.getInt("highscore", 123); // data1=123
int data2 = object.getInt("score", 123); // data2=987
boolean data3 = object.getBoolean("mode", true); // data3=true
String data4 = object.getString("mode", "true"); // data4="easy"
data1
: 指定されたキー "highscore" が JSON にないため、第 2 引数のデフォルト値が使用されます。data2
: 指定されたキー "score" を int で読み込めたため、JSON の値が使用されます。デフォルト値は無視されます。data3
: 指定されたキー "mode" を boolean に変換することはできないため、第 2 引数のデフォルト値が使用されます。data4
: 指定されたキー "mode" を String で読み込めたため、JSON の値が使用されます。デフォルト値は無視されます。
サポートするデータ型
getter メソッドのバリエーションを、以下の表に示します。「読み込み元 JSON の例」に示す JSON ドキュメントを「呼び出し例」または「デフォルトの指定例」で取得すると、「取得結果」の値を取得できます。
「取得結果」はデフォルト値を使用する例を記載していませんが、上記のようにキーがない場合やエラーの場合には、引数で指定したデフォルト値が取得されます。
値の型 | 読み込み元 JSON の例 | 呼び出し例 | デフォルトの指定例 | 取得結果 |
---|---|---|---|---|
String | "data":"123" |
getString("data"); |
getString("data", "abc"); |
"123" |
int | "data":123 |
getInt("data"); |
getInt("data", 987); |
123 |
long | "data":123 |
getLong("data"); |
getLong("data", 987L); |
123L |
double | "data":123.456 |
getDouble("data"); |
getDouble("data", 987.654); |
123.456 |
Boolean | "data":true |
getBoolean("data"); |
getBoolean("data", false); |
true |
GeoPoint | "data":{ "_type": "point", "lat": 35.658603, "lon": 139.745433 } |
getGeoPoint("data"); |
getGeoPoint("data", geoPoint); |
位置情報 (35.658603, 139.745433) |
JSONArray | "data":[1,2,3] |
getJSONArray("data"); |
getJSONArray("data", array); |
[1,2,3] |
JSONObject | "data":{"a":"b"} |
getJSONObject("data"); |
デフォルト指定なし | {"a":"b"} |
Uri | "data":"http://kii.com/" |
getUri("data"); |
デフォルト指定なし | "http://kii.com/" |
byte[] | "data":"YWFhYQ==\n" |
getByteArray("data"); |
デフォルト指定なし | {61, 61, 61, 61} BASE64 デコードした結果 |
基本データ型の取得
KiiObject にセットされたキーと値のペアを取得するには、取得するデータ型に対応した getter メソッドを使用します(getter メソッドの詳細は Javadoc を参照してください)。
以下に、KiiObject よりキーと値のペアを取得するサンプルを挙げます。
インスタンス作成後、refresh()
メソッドを呼ぶのを忘れないようにしてください。KiiObject のインスタンスを生成しただけでは、KiiObject の中身は最新のものになりません。
キー一覧の取得
KiiObject にセットされているキーの一覧は、次の例のように keySet
メソッドを使って確認できます。
keySet()
メソッドでは、プログラムから設定したキーの一覧のみを取得できます。Kii Cloud SDK for Android では、_version や _id などの所定キーは読み込めません。所定キーについて詳しくは、所定キー をご覧ください。
空のフィールドの読み込み
キーと値のペアの取得の際は、存在しないキーの値を読み込むと例外が発生します。回避するにはデフォルト値付きの取得メソッドを利用できます。
たとえば、以下のような JSON が書き込まれているオブジェクトから値を読み込むものとします。
{
"key1": null,
"key2": ""
}
各メソッドでの取得結果は以下のとおりです。
- json.getString("key1") は null を返します。
- json.getString("key2") は空文字列を返します。
- json.getString("key3") は例外となります。
- json.getString("key3", null) は null を返します。
なお、Object に書き込んだときのデータ型と、取得メソッドのデータ型は一致させる実装をおすすめします。JSON とデータ型との対応の詳細は、取得時のデータ変換 をご覧ください。
作成/更新時間の取得
Kii Cloud は、KiiObject の作成時間と最終更新時間を自動的にセットします(いずれも UNIX 時間、ミリ秒)。これらの情報は、それぞれ KiiObject
オブジェクトの getCreatedTime()
メソッドと getModifiedTime()
メソッドを実行することで取得可能です。
なお、時間は UTC(協定世界時)で保存されているため、必要に応じて変換を行ってください。
位置情報(GeoPoint)の取得
KiiObject にセットした位置情報を抽出するには、まず KiiObject のキーを指定して getGeoPoint()
メソッドを実行し、GeoPoint
オブジェクトを取得します。この後、getLatitude()
メソッドおよび getLongitude()
メソッドを実行して、それぞれ緯度、経度の取得を行います。
// Get GeoPoints from the "location1" and "location2" keys.
GeoPoint objLoc1 = object.getGeoPoint("location1");
GeoPoint objLoc2 = object.getGeoPoint("location2");
// Get the latitude and longitude data.
double lat1 = objLoc1.getLatitude();
double lon1 = objLoc1.getLongitude();
double lat2 = objLoc2.getLatitude();
double lon2 = objLoc2.getLongitude();
複雑なデータ型の取得
KiiObject にセットした、バイト配列、JSON オブジェクト、JSON オブジェクトの配列などのデータ型は、それに対応するメソッドで取得できます。
複雑なデータ型の設定 のサンプルコードでセットした値を取得する例を以下に挙げます。
// Get a value of a byte array.
byte[] byteArray = object.getByteArray("myByteArray");
// Get a value of a JSON object.
JSONObject jsonObject = object.getJSONObject("myObject");
String jsonString = jsonObject.toString();
// Get a value of a JSON array.
JSONArray jsonArray = object.getJsonArray("myArray");
try {
String arrayElement1 = jsonArray.get(0).toString();
String arrayElement2 = jsonArray.get(1).toString();
} catch (JSONException e) {
// Handle the error.
}