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" 加载它。
我有一个 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" 加载它。