2

最初の実行時に使用できるようにするには、設定 XML で設定されたデフォルト値が必要です。

一部の携帯電話ではこれが機能しますが、他の一部の携帯電話 ( Samsungなど) は非常に奇妙な動作をします。

私の特定のケースでは、次のコード:

String key = "@string/timeout_key"
timeout = Integer.valueOf(prefs.getString(key, "10"));

プリファレンス XML では次のように指定されていtimeoutますが、既定値の "10" ( に 2 番目のパラメーターとして渡される)を ( に) 返し続けます。prefs.getString()

android:defaultValue="5"

文字列「timeout_key」が存在し、正しく読み取られていることを確認できました。

私の「手動の回避策」は、現在、設定エディターを呼び出し、設定を再入力して [OK] を押すことです。

これをプログラムで行う方法はありますか?

4

1 に答える 1

2

SharedPreferences.getString()メソッドにはバグがあり、 を返しませんandroid:defaultValue。読み取りが失敗した場合にのみ、2 番目のパラメーターを返します。これを回避するには、2 番目のパラメーターにnullを入力します。

timeout = Integer.valueOf(prefs.getString(key, null));

これはもちろん、アプリのインストール後に最初に呼び出したときに例外をスローするため、それを で囲みtry、例外をキャッチするときに、デフォルト (android:defaultValue にあるもの、元々使用することを意図していたもの) を記述します。 Android にバグがなければ):

try {
  timeout = Integer.valueOf(prefs.getString(key, null));
}
catch (Exception e) {
  Editor editor = prefs.edit();
  editor.putString(key, Integer.toString(defaultValue));
  editor.commit();
}

醜いが、動作します。

于 2011-10-21T04:41:02.830 に答える