【问题标题】:SharedPreferences not persisting through Android appSharedPreferences 不会通过 Android 应用程序持续存在
【发布时间】:2016-07-05 05:02:04
【问题描述】:

我有一个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);
            }
        });
    }
}

【问题讨论】:

    标签: android sharedpreferences android-sharedpreferences


    【解决方案1】:

    我尝试编辑该值,但即使我调用共享首选项 值与我刚刚编辑的键,它仍然显示旧值。什么 我做错了吗?

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

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

    在两个活动中使用相同的名称。让它工作在SettingsActivity中将sweater更改为MyPrefs

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

    【讨论】:

      【解决方案2】:

      这两行在两个活动中都不同

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        您将值存储在“毛衣”偏好设置中并从“我的偏好设置”加载它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-10
          • 2010-12-10
          • 1970-01-01
          • 2019-08-13
          • 2020-05-12
          • 2015-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多