使用SharedPreferences在一个活动中高效地保存多个EditText



我找到了类似问题的答案,但没有一个对我有效。
Q1:在程序关闭后保存多个EditText
Q2:保存EditText中的最新文本,并在onDestroy 后恢复

就我而言,我们讨论的是大约50个EditText。关于问题Q2,我想好了如何保存一个EditText,但当我复制不同EditText的代码(并使用不同的参数(时,重新启动每个EditText都会显示相同的单词。

public static final String LAST_TEXT1 = "";
public static final String LAST_TEXT2 = "";
public EditText myEditText1, myEditText2;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
myEditText1= (EditText)findViewById(R.id.myEditText1);
final SharedPreferences pref1= PreferenceManager.getDefaultSharedPreferences(this);
myEditText1.setText(pref.getString(LAST_TEXT1, ""));
myEditText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
pref.edit().putString(LAST_TEXT1, s.toString()).commit();

}
});
myEditText2= (EditText)findViewById(R.id.myEditText2);
final SharedPreferences pref2= PreferenceManager.getDefaultSharedPreferences(this);
myEditText2.setText(pref.getString(LAST_TEXT2, ""));
myEditText2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
pref.edit().putString(LAST_TEXT2, s.toString()).commit();

}
});
}

基本上,所有参数都发生了几次变化。(pref,myEditText,LAST_TEXT(但是所有不同的EditText(如myEditText1和myEditText2(在重新启动时都会显示相同的单词。

有什么有效的方法可以保存所有这些内容吗
是否有更好的方法将字符串保存在表中(我是初学者(如果没有"有效"的方法来保存所有这些EditText,我该如何更改代码,使其正确保存数据?

提前谢谢。

根据您的代码,您对所有EditText使用相同的密钥,这就是它给您的回报:

public static final String LAST_TEXT1 = "";
public static final String LAST_TEXT2 = "";

这里CCD_ 2和CCD_。SharedPreferences是基于密钥/值的存储选项。如果要为所有editext保存不同的值,请使用不同的键。我建议不要空字符串。

您还可以使用一个键来存储一个对象,该对象包含您所有的edittext值,这些值按照您想要的方式结构化,您应该能够轻松地检索数据,例如使用JSONArray并字符串化它。

EditText2的内容将替换您首选项中EditText1的内容,因为您使用的是相同的密钥。

当您尝试检索内容时,将显示""的相关值。CCD_ 8和CCD_。键是包含在变量中的内容。

我希望这会有所帮助。

1。SharedPreference将数据保存在键值对中。您为某个密钥保存数据,并在需要时使用该密钥恢复值,即使应用程序已关闭。

在您的案例中,您使用了两个变量来存储字符串键,名为LAST_TEXT1LAST_TEXT2但遗憾的是,两者都携带相同的值,"或空字符串。由于两个键在技术上是相同的,所以您得到的结果是相同的。这样定义这两个键可以得到不同的结果:

public static final String LAST_TEXT1 = "LAST_TEXT1";
public static final String LAST_TEXT2 = "LAST_TEXT2";

2.SharedPreference用于简单和简短的键值。如果您的值超过几个单词,我建议使用Sqlite数据库或类似的长时间数据持久化方法。

最新更新