キーと値のペアの取得

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 よりキーと値のペアを取得するサンプルを挙げます。

  • // Instantiate a KiiObject.
    Uri objUri = Uri.parse("Set the URI of an existing KiiObject here");
    KiiObject object = KiiObject.createByUri(objUri);
    
    try {
      // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
      object.refresh();
    
      // Get key-value pairs.
      String stringData = object.getString("stringValue");
      int intData = object.getInt("intValue");
      long longData = object.getLong("longValue");
      double doubleData = object.getDouble("doubleValue");
      boolean booleanData = object.getBoolean("booleanValue");
    } catch (IOException e) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    }
  • // Instantiate a KiiObject.
    Uri objUri = Uri.parse("Set the URI of an existing KiiObject here");
    KiiObject object = KiiObject.createByUri(objUri);
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh(new KiiObjectCallBack() {
      @Override
      public void onRefreshCompleted(int token, KiiObject object, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
        // Get key-value pairs.
        String stringData = object.getString("stringValue");
        int intData = object.getInt("intValue");
        long longData = object.getLong("longValue");
        double doubleData = object.getDouble("doubleValue");
        boolean booleanData = object.getBoolean("booleanValue");
      }
    });

インスタンス作成後、refresh() メソッドを呼ぶのを忘れないようにしてください。KiiObject のインスタンスを生成しただけでは、KiiObject の中身は最新のものになりません。

キー一覧の取得

KiiObject にセットされているキーの一覧は、次の例のように keySet メソッドを使って確認できます。

  • // Instantiate a KiiObject.
    Uri objUri = Uri.parse("Set the URI of an existing KiiObject here");
    KiiObject object = KiiObject.createByUri(objUri);
    try {
      // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
      object.refresh();
    
      // Get a list of keys.
      HashSet<String> keyset = object.keySet();
    } catch (IOException e) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    }
  • // Instantiate a KiiObject.
    Uri objUri = Uri.parse("Set the URI of an existing KiiObject here");
    KiiObject object = KiiObject.createByUri(objUri);
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh(new KiiObjectCallBack() {
      @Override
      public void onRefreshCompleted(int token, KiiObject object, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
        // Get a list of keys.
        HashSet<String> keyset = object.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.
}