KiiCloud

ひとりKii Cloud Advent Calendar 2014-12-9

More than 3 years have passed since last update.

この記事は、ひとりKii Cloud Advent Calendarの9日目の記事です。


9日目「もうちょっと高度なオブジェクト操作」

8日目ではオブジェクトの作成と取得のみやったので、今日は更新とか削除とか。


更新

公式SDKも同じだが、Kii Cloudにおける更新は4パターンある。

更新方法
更新条件

全部更新
無条件

全部更新
サーバーで更新されていなければ

一部更新
無条件

一部更新
サーバーで更新されていなければ


無条件に全部更新

フィールドを消したい場合はこれ。

// objはKiiObject

mAPI.objectAPI().save(obj, new ObjectAPI.ObjectCallback<KiiBucket, KiiObject>() {
@Override
public void onSuccess(KiiObject kiiObject) {
// 何か処理
}

@Override
public void onError(Exception e) {
// 何か処理
}
});


サーバーで更新していなければ全部更新

あ、これ無いや


無条件に一部更新

オブジェクトのIDと差分だけ分かっている時はこれがお手軽。通信量も抑えれる。

// 更新したいフィールドの情報だけ持ったJSONObject

JSONObject patch = new JSONObject();
try {
patch.put(FIELD_TITLE, newTitle);
} catch (JSONException e) {
// nop
}

mAPI.objectAPI().updatePatch(obj, patch, new ObjectAPI.ObjectCallback<KiiBucket, KiiObject>() {
@Override
public void onSuccess(KiiObject kiiObject) {

}

@Override
public void onError(Exception e) {

}
});


サーバーで更新していなければ一部更新

複数人や複数端末で更新される場合、オブジェクトの取得から更新のリクエストを投げる間にサーバーのオブジェクトが更新されることがある。それを検知できるのがこれ。

JSONObject patch = new JSONObject();

try {
patch.put(FIELD_TITLE, newTitle);
} catch (JSONException e) {
// nop
}

mAPI.objectAPI().updatePatchIfUnmodified(obj, patch, new ObjectAPI.ObjectCallback<KiiBucket, KiiObject>() {
@Override
public void onSuccess(KiiObject kiiObject) {

}

@Override
public void onError(Exception e) {
// もしエラーだったら、もう一度取得からやりなおし。
// 必要に応じて「リロードします」のメッセージを出したり。
}
});