SharedPreferences 未通过 Android 应用持续存在

SharedPreferences not persisting through Android app

我有一个 IntroActivity,我在共享首选项中保存从 EditText 保存的值。

在我的 SettingsActivity 中,我尝试编辑该值,但即使当我使用刚刚编辑的密钥调用共享首选项值时,它仍然显示旧值。我做错了什么?

这是IntroActivity

public class IntroActivity extends Activity {

    String PREF = "MyPrefs";
    Button mDone;
    EditText mTemperature;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intro);

        mDone = (Button) findViewById(R.id.done);
        mTemperature = (EditText) findViewById(R.id.temperature);

        mDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int temperature = Integer.parseInt(mTemperature.getText().toString());
                SharedPreferences preferences = getSharedPreferences(PREF, Context.MODE_PRIVATE);
                SharedPreferences.Editor edit = preferences.edit();
                edit.putInt("sweater", temperature);
                edit.commit();

                Intent intent = new Intent(IntroActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

这是SettingsActivity

public class SettingsActivity extends ActionBarActivity {

    Button mDone;
    EditText mTemperature;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        mDone = (Button) findViewById(R.id.done);
        mTemperature = (EditText) findViewById(R.id.temperature);

        mDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                SharedPreferences preferences = getSharedPreferences("sweater", 0);
                SharedPreferences.Editor edit = preferences.edit();

                int temp = preferences.getInt("sweater", 0);
                int updateSweater = Integer.parseInt(mTemperature.getText().toString());
                edit.remove("sweater");
                edit.putInt("sweater", updateSweater);
                boolean saved = edit.commit();
                preferences.getInt("sweater", 0);

                Toast.makeText(SettingsActivity.this, "Sweater Weather Updated", Toast.LENGTH_SHORT).show();

                Map<String, ?> map = preferences.getAll();
                for(Map.Entry<String,?> entry : map.entrySet()){
                    Log.d("map values",entry.getKey() + ": " +
                            entry.getValue().toString());
                }
                Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

I try to edit that value, but even when I call the shared preferences value with the key I just edited, it still shows the old value. What am I doing wrong?

因为SharedPreferences两个活动中的名称不同。

IntroActivity 中使用 MyPrefs,在 SettingsActivity 中使用 sweater

在两个活动中使用相同的名称。让它工作在 SettingsActivity:

中将 sweater 更改为 MyPrefs
SharedPreferences preferences = getSharedPreferences("MyPrefs", 0);

这两条线在两个活动中都是不同的

SharedPreferences preferences = getSharedPreferences(PREF, Context.MODE_PRIVATE);

SharedPreferences preferences = getSharedPreferences("sweater", 0);

对于这个问题,您必须创建两个 pref 文件并从另一个文件中读取值。

我相信你的SettingsActivity,你需要使用 SharedPreferences preferences = getSharedPreferences("MyPrefs", 0);

而不是SharedPreferences preferences = getSharedPreferences("sweater", 0);

您将值存储在 "sweater" 首选项中并从 "MyPrefs" 加载它。