不可分な更新
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;
}
...
}