我找到了类似问题的答案,但没有一个对我有用。
问题1:Saving several EditText after program closes
问题2:Save latest text from Edittext and restore it after onDestroy
就我而言,我们谈论的是〜50个EditTexts。对于问题Q2,我想出了如何保存一个EditText的方法,但是,当我重新启动每个EditText时,为不同的EditTexts复制代码(并使用不同的参数)时,它会显示相同的单词。
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();
}
});
}
基本上,这几次都更改了所有参数。 (首选,myEditText,LAST_TEXT),但是所有不同的EditText(例如myEditText1和myEditText2)在重新启动时都会显示相同的单词。
是否有任何有效的方法来保存所有这些内容?
是否有更好的方法将字符串保存在表中(我是初学者)
如果没有“有效”的方法来保存所有这些EditText,如何更改代码以正确保存数据?
谢谢。
答案 0 :(得分:1)
根据您的代码,您对所有EditText
使用相同的密钥,这就是它给您的回报:
public static final String LAST_TEXT1 = "";
public static final String LAST_TEXT2 = "";
这里LAST_TEXT1
和LAST_TEXT2
相等。 SharedPreferences
是基于键/值的存储选项。如果要为所有editexts保存不同的值,请使用不同的键。我建议不要使用空字符串。
您还可以使用一个键并存储一个对象,该对象包含所需结构化的所有edittexts值,您应该能够轻松地检索数据,例如使用JSONArray对其进行字符串化。
EditText2
的内容将根据您的偏好替换EditText1
的内容,因为您使用的是相同的密钥。
当您尝试检索内容时,将显示""
的关联值。 LAST_TEXT1
和LAST_TEXT2
只是此处的变量。键是变量中包含的内容。
我希望这会有所帮助。
答案 1 :(得分:0)
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数据库或类似的长期数据持久化方法。