KiiObject の作成

ここでは、KiiObject を新規に作成する方法を説明します。KiiObject の内部に格納する JSON ドキュメントを設定する方法は、キーと値のペアの設定 を参照してください。

KiiObject の作成

KiiObject の作成を行うには、保存先 Bucket の object() メソッドを呼び出してクライアント側で KiiObject を作成した後、save() メソッドを呼び出します。作成された KiiObject の ID は、Kii Cloud によって自動的に割り当てられます。

  • // Create a KiiObject.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object();
    
    // Set key-value pairs.
    object.set("score", 987);
    object.set("mode", "easy");
    object.set("premiumUser", false);
    
    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("score", 987);
    object.set("mode", "easy");
    object.set("premiumUser", false);
    
    // 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 に反映されません。

このコードを実行すると、Kii Cloud の指定された Bucket(この例ではユーザースコープの MyBucket)に KiiObject が作成されます。

ここでは、save() メソッドの実行前に、set() メソッドで 3 つのフィールドに値を格納しています。値の格納方法は、キーと値のペアの設定 を参照してください。

ID を指定して KiiObject を作成

作成された KiiObject には自動的に ID が付与されますが、明示的に ID を指定して KiiObject を作成することもできます。

以下に、先ほどと同じ KiiObject を ID を指定して作成する例を挙げます。

  • String id = "score_userX";
    
    // Check whether the KiiObject ID is valid.
    if (!KiiObject.isValidObjectID(id)) {
      // The KiiObject ID is invalid.
    }
    
    // Create a KiiObject with the specific ID.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object(id);
    
    // Set key-value pairs.
    object.set("score", 987);
    object.set("mode", "easy");
    object.set("premiumUser", false);
    
    try {
      // Save the KiiObject.
      object.saveAllFields(true);
    } catch (IOException e) {
      // Handle the error.
    } catch (AppException e) {
      // Handle the error.
    }
  • String id = "score_userX";
    
    // Check whether the KiiObject ID is valid.
    if(!KiiObject.isValidObjectID(id)) {
      // The KiiObject ID is invalid.
    }
    
    // Create a KiiObject with the specific ID.
    KiiObject object = KiiUser.getCurrentUser().bucket("MyBucket").object(id);
    
    // Set key-value pairs.
    object.set("score", 987);
    object.set("mode", "easy");
    object.set("premiumUser", false);
    
    // Save the KiiObject.
    object.saveAllFields(new KiiObjectCallBack() {
      @Override
      public void onSaveCompleted(int token, KiiObject object, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
      }
    }, true);

ID は object() メソッド実行時に指定します。また ID の妥当性を isValidObjectID メソッドで確認できます(使用可能な ID のパターンについては Javadoc を参照してください)。

明示的に ID を指定した場合は、saveAllFields() メソッドを実行することにより Kii Cloud 上に KiiObject が新規作成されます。ID 指定の場合は save() メソッドによる新規作成はできません。

なお、上記の例において "score_userX" という ID を持つ KiiObject がサーバーにすでに存在していた場合は、この KiiObject が上書きされます(必要に応じて saveAllFields メソッド実行時に false を指定すると、このような上書きを防ぐことが可能です。詳細については Javadoc を参照してください)。

KiiObject アクセスのヒント

  • アプリケーションスコープに書き込めない:

    アプリケーションスコープはすべてのユーザーや、ログイン前の匿名ユーザーの状態でも読み込めますが、書き込むにはユーザーのログインが必要です。もし、アプリでユーザーのログイン操作を省略したい場合は、匿名ユーザーのままアプリケーションスコープの ACL を変更するのではなく、仮ユーザー(Pseudo User)としてログインする設計をおすすめします。詳細は、仮ユーザー(Pseudo User) をご覧ください。

    また、アプリケーションスコープの利用にはセキュリティの考慮も必要です。詳細は、セキュリティ をご覧ください。

  • 書き込んだはずの KiiObject が参照できない:

    Bucket のスコープが意図したとおりかどうか、ご確認ください。

    書き込みと読み込みを異なるスコープで行うと、Bucket 名が同じであっても書き込んだ内容を取得できません。開発者ポータルのデータブラウザを使って読み込んだ場合でも、同様です。

    たとえば、Kii.bucket("myBucket") でアプリケーションスコープに作成したデータは、Kii.user().bucket("myBucket") でユーザースコープから読み込もうとしても、結果が得られません。