1

Android アプリケーションに設定アクティビティがあります。これは、アイテムの選択時に設定を保存することを目的としています。私の問題は、設定が保存されないことです。次のメソッドは、ユーザーの選択が行われるたびに呼び出されます。

public void savePreferences()
{
    defaultVolumeUnit = MySingleton.getInstance().getDefaultVolumeUnit();
    defaultPressureUnit = MySingleton.getInstance().getDefaultPressureUnit();
    defaultTempUnit = MySingleton.getInstance().getDefaultTempUnit();

    settings = getSharedPreferences(SettingsTAG, 0);
    Editor editor = settings.edit();

    editor.putInt("selectVolume", defaultVolumeUnit);
    editor.putInt("selectPressure", defaultPressureUnit);
    editor.putInt("selectTemperature", defaultTempUnit);

    editor.commit();
}

また、起動時にすべての設定が復元される MAIN アクティビティで次のコードを使用します。

public void restoreValues()
{
    settings = getSharedPreferences(SettingsTAG, 0);

    int SelectedVolume = settings.getInt("selectVolume", 0);
    int SelectedPressure = settings.getInt("selectPressure", 0);
    int SelectedTemperature = settings.getInt("selectTemperature", 0);

    // Necessary assignments here...
}

アプリケーション全体でグローバル変数を使用していますが、それらは保存されますが、設定は保存されません。savePreferences() と restoreValues() メソッドの両方が呼び出されることは確かですが、ユーザーが選択したものは保存されません。

つまり、何も保存/復元されません。何が間違っているのかわかりませんが、この問題は私を夢中にさせています。これは以前は機能していましたが、設定UIの刷新を行っているところ、同じコードが突然機能しなくなりました...

何か助けてください。

4

1 に答える 1

0

あなたはあなたの活動でこれを行うべきだと思います:

private SharedPreferences prefSettings;

public void restoreValues()
{
    prefSettings = PreferenceManager.getDefaultSharedPreferences(this);

    int SelectedVolume = prefSettings.getInt("selectVolume", 0);
    int SelectedPressure = prefSettings.getInt("selectPressure", 0);
    int SelectedTemperature = prefSettings.getInt("selectTemperature", 0);

    // Necessary assignments here...
}

私が気付いたあなたのメソッドでは、あなたのパラメータは実際には正しく見えません...なぜあなたはメソッドのパラメータとしてを使用しているのSettingsTAGですか?あなたの活動は拡大していますか?コンテキストを使用する必要があります。0getSharedPreference PreferenceActivity

public void savePreferences()
{
    defaultVolumeUnit = MySingleton.getInstance().getDefaultVolumeUnit();
    defaultPressureUnit = MySingleton.getInstance().getDefaultPressureUnit();
    defaultTempUnit = MySingleton.getInstance().getDefaultTempUnit();

    //settings = getSharedPreferences(SettingsTAG, 0);
    settings = PreferenceManager.getDefaultSharedPreferences(context); // Notice CONTEXT!
    Editor editor = settings.edit();

    editor.putInt("selectVolume", defaultVolumeUnit);
    editor.putInt("selectPressure", defaultPressureUnit);
    editor.putInt("selectTemperature", defaultTempUnit);

    editor.commit();
}

編集: デバッグする場合は、次のように行う方がよい場合があります。

public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
    private static final String TAG = "PreferencesActivity";

///.... code....

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){
    Log.d(TAG, "onSharedPreferenceChanged() - key = " + key);
    // Yup! The key within the shared preferences was changed... inspect 'em via Log!
}

理由:実際に設定を保存していることを確認するために行われた変更を「聞いている」。デバッグが終了したらLog、logcatに表示されないように、必ず呼び出しを削除してください。

于 2012-07-08T00:30:20.927 に答える