我找到了类似问题的答案,但没有一个对我有效。
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_TEXT1
和LAST_TEXT2
但遗憾的是,两者都携带相同的值,"或空字符串。由于两个键在技术上是相同的,所以您得到的结果是相同的。这样定义这两个键可以得到不同的结果:
public static final String LAST_TEXT1 = "LAST_TEXT1";
public static final String LAST_TEXT2 = "LAST_TEXT2";
2.SharedPreference
用于简单和简短的键值。如果您的值超过几个单词,我建议使用Sqlite数据库或类似的长时间数据持久化方法。