不可分な更新

Preferences APIには、複数の設定が不可分に変更されるデータベースのような"トランザクション"はありません。ただし、複数の設定を変更するときは、1単位で行う必要があります。

たとえば、x座標とy座標を格納して、そこにウィンドウを配置することを想定します。不可分に変更するには、これらの値を単一の設定に格納します。さまざまな方法でエンコードできます。ここでは簡単な例を示します。

int x, y;
...
prefs.put(POSITION, x + "," + y);

このような複合設定を読み込むときは、復号化する必要があります。安定性を確保するために、値が破損した(解析不可能な)場合を考慮することをお勧めします。

static int X_DEFAULT = 50, Y_DEFAULT = 25;
void parsePrefs() {
    String position = prefs.get(POSITION, X_DEFAULT + "," + Y_DEFAULT);
    int x, y;
    try {
        int i = position.indexOf(',');
        x = Integer.parseInt(coordinates.substring(0, i));
        y = Integer.parseInt(position.substring(i + 1));
    } catch(Exception e) {
        // Value was corrupt, just use defaults
        x = X_DEFAULT;
        y = Y_DEFAULT;
    }
    ...
}