キーと値のペアの設定

KiiObject にキーと値のペアを設定するには、KiiObject クラスの set() メソッドを呼び出します。set() メソッドは格納する型ごとにオーバーロードされたメソッドを用意しています。

set() メソッドの引数には、キー名と値を設定します。指定したキーと値のペアは JSON ドキュメントの第 1 階層として保存されます。

以下に値を設定するためのサンプルコードを示します。KiiObject の保存処理まで含む完全なコードは、KiiObject の作成、または、下記の 基本データ型の設定 を参照してください。また、KiiObject の更新 でも値の設定を行います。

KiiObject object = bucket.object();
object.set("score", 987);
object.set("mode", "easy");
object.set("premiumUser", false);

このコードを実行後、KiiObject を保存すると、JSON 形式のデータが作成されます(管理用フィールドは省略しています)。

{
  "score": 987,
  "premiumUser": false,
  "mode": "easy"
}

第 2 階層より深い位置に値を書き込みたい場合は、目的の階層に値をセットした JSONObject を第 1 階層に書き込んでください。

1 つの KiiObject に格納できるデータの最大サイズは、キーと値のペアを JSON 形式で表現した状態で 65534 文字までです(サイズには Kii Cloud が内部で使用するフィールドも含まれます)。

サポートするデータ型

set() メソッドの値部分は、以下の表に示す型を指定できます。

Kii Cloud に格納できる数値の範囲には制限がないため、各型で表現可能な最大値を格納することができます。

表の「JSON での値の格納結果」は、開発者ポータルのデータブラウザーで確認したり、他のプラットフォームで参照したりする際の参考として利用できます。格納と参照を同じ型で行う場合、JSON での格納結果を意識する必要は特にありません。

値の型 呼び出し例 JSON での値の格納結果 備考
String set("data", "123"); "data":"123"
int set("data", 123); "data":123
long set("data", 123L); "data":123
double set("data", 123.456); "data":123.456
Boolean set("data", true); "data":true
GeoPoint set("data", geoPoint); "data":{
"_type": "point",
"lat": 35.658603,
"lon": 139.745433
}
geoPoint が (35.658603, 139.745433) の場合
JSONArray set("data", array); "data":[1,2,3] array が [1,2,3] の場合
JSONObject set("data", json); "data":{"a":"b"} json が {"a":"b"} の場合
Uri set("data", uri); "data":"http://kii.com/" uri が "http://kii.com/" の場合
byte[] set("data", value); "data":"YWFhYQ==\n" value が {61, 61, 61, 61} の場合
結果は BASE64 エンコードした値
  • 値として null を設定する方法はありません。設定すると無視またはエラーとなります。
  • 日付型(java.util.Date)を設定したい場合、getTime() メソッドにより、1970 年 1 月 1 日 00:00:00 UTC からのミリ秒数を long 型のデータとして格納すれば扱いが簡単になります。

基本データ型の設定

KiiObject の新規作成時に、String、int、long、double、Boolean の各データ型を格納する例を以下に示します。

なお、以下のサンプルコードは、KiiObject の作成 のサンプルコードより、値の格納部分を変更したものです。

  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Set key-value pairs.
    object.set("stringValue", "my value");
    object.set("intValue", 123);
    object.set("longValue", new Date().getTime());
    object.set("doubleValue", 987.654);
    object.set("booleanValue", true);
    
    try {
      // Save the KiiObject.
      object.save();
    } catch (IOException e) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    }
  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Set key-value pairs.
    object.set("stringValue", "my value");
    object.set("intValue", 123);
    object.set("longValue", new Date().getTime());
    object.set("doubleValue", 987.654);
    object.set("booleanValue", true);
    
    // Save the KiiObject.
    object.save(new KiiObjectCallBack() {
      @Override
      public void onSaveCompleted(int token, KiiObject object, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
      }
    });

このコードを実行すると、KiiObject には以下のような JSON 形式のデータが作成されます(管理用フィールドは省略しています)。

{
  "stringValue": "my value",
  "booleanValue": true,
  "longValue": 1495677489018,
  "doubleValue": 987.654,
  "intValue": 123
}

位置情報(GeoPoint)の設定

次に、KiiObject に位置情報(GeoPoint)をセットする方法を説明します。

位置情報を格納するには、まず緯度と経度を指定して GeoPoint オブジェクトを作成します。この後、作成した GeoPoint を値として持つキーと値のペアを KiiObject にセットします。

例として、現在ログイン中のユーザーのユーザースコープに存在する "MyBucket" という Bucket 内に KiiObject を作成し、これに位置情報を 2 つセットするサンプルコードを以下に挙げます。

  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Create GeoPoint objects.
    GeoPoint point1 = new GeoPoint(35.658603, 139.745433);
    GeoPoint point2 = new GeoPoint(35.658625, 139.745415);
    
    // Set the GeoPoints to the KiiObject.
    object.set("location1", point1);
    object.set("location2", point2);
    
    try {
      // Save the KiiObject.
      object.save();
    } catch (IOException ioe) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    
    }
  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Create GeoPoint objects.
    GeoPoint point1 = new GeoPoint(35.658603, 139.745433);
    GeoPoint point2 = new GeoPoint(35.658625, 139.745415);
    
    // Set the GeoPoints to the KiiObject.
    object.set("location1", point1);
    object.set("location2", point2);
    
    // Save the KiiObject.
    object.save(new KiiObjectCallBack() {
      @Override
      public void onSaveCompleted(int token, KiiObject object, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
      }
    });

save() メソッドの実行を忘れないでください。save() メソッドを実行するまで、KiiObject にセットしたキーと値のペアは Kii Cloud に反映されません。

複雑なデータ型の設定

単純なデータ型以外にも、バイト配列、JSON オブジェクト、JSON オブジェクトの配列などのデータ型を SDK でサポートしています。

以下にこれらのデータ型の値を格納する例を挙げます。

  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Set a value of a byte array.
    byte[] byteArray = {
      0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f
    };
    object.set("myByteArray", byteArray);
    
    try {
      // Set a value of a JSON object.
      JSONObject jsonObject = new JSONObject("{\"score\": 987, \"mode\": \"easy\"}");
      object.set("myObject", jsonObject);
    
      // Set a value of a JSON array.
      JSONArray jsonArray = new JSONArray();
      JSONObject arrayElement1 = new JSONObject("{\"Name\": \"Alice\", \"age\": 30}");
      jsonArray.put(arrayElement1);
      JSONObject arrayElement2 = new JSONObject("{\"Name\": \"Bob\", \"age\": 28}");
      jsonArray.put(arrayElement2);
      object.set("myArray", jsonArray);
    } catch (JSONException e) {
      // Handle the error.
    }
    
    try {
      // Save the KiiObject.
      object.save();
    } catch (IOException e) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    }
  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Set a value of a byte array.
    byte[] byteArray = {
      0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f
    };
    object.set("myByteArray", byteArray);
    
    try {
      // Set a value of a JSON object.
      JSONObject jsonObject = new JSONObject("{\"score\": 987, \"mode\": \"easy\"}");
      object.set("myObject", jsonObject);
    
      // Set a value of a JSON array.
      JSONArray jsonArray = new JSONArray();
      JSONObject arrayElement1 = new JSONObject("{\"Name\": \"Alice\", \"age\": 30}");
      jsonArray.put(arrayElement1);
      JSONObject arrayElement2 = new JSONObject("{\"Name\": \"Bob\", \"age\": 28}");
      jsonArray.put(arrayElement2);
      object.set("myArray", jsonArray);
    } catch (JSONException e) {
      // Handle the error.
    }
    
    // Save the KiiObject.
    object.save(new KiiObjectCallBack() {
      @Override
      public void onSaveCompleted(int token, KiiObject object, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
      }
    });

save() メソッドの実行を忘れないでください。save() メソッドを実行するまで、KiiObject にセットしたキーと値のペアは Kii Cloud に反映されません。

このコードを実行すると、KiiObject には以下のような JSON 形式のデータが作成されます(管理用フィールドは省略しています)。

{
  "myArray": [
    {
      "Name": "Alice",
      "age": 30
    },
    {
      "Name": "Bob",
      "age": 28
    }
  ],
  "myByteArray": "aHR0cHM6Ly8=\n",
  "myObject": {
    "score": 987,
    "mode": "easy"
  }
}