我有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);
}
});
}
}
答案 0 :(得分:3)
我尝试编辑该值,但即使我调用共享首选项 使用我刚编辑的键的值,它仍然显示旧值。什么 我做错了吗?
因为SharedPreferences
名称在两个活动中都不同。
在使用IntroActivity
的{{1}}和使用MyPrefs
的{{1}}中。{/ p>
在两个活动中使用相同的名称。要使其工作,请在SettingsActivity
中将sweater
更改为sweater
:
MyPrefs
答案 1 :(得分:2)
这两行在两项活动中都有所不同
SharedPreferences preferences = getSharedPreferences(PREF, Context.MODE_PRIVATE);
和
SharedPreferences preferences = getSharedPreferences("sweater", 0);
对于此问题,您必须创建两个pref文件并从另一个文件中读取值。
答案 2 :(得分:1)
我相信你的SettingsActivity,你需要使用
SharedPreferences preferences = getSharedPreferences("MyPrefs", 0);
而不是SharedPreferences preferences = getSharedPreferences("sweater", 0);
您将值存储在“sweater”首选项中并从“MyPrefs”加载。