我有邮件申请。在我的邮箱文本框中,我需要输入超过1000个单词的长文本。如果发生任何事情并且活动崩溃,我的数据就会丢失。如何保存数据,以便在崩溃后重新打开活动时,整个键入的邮件会保留在文本框中而不会丢失?
答案 0 :(得分:2)
为您的邮件EditText
设置一个监听器,并在用户输入时将文本保存在Database
或SharePreferences
中,最后在用户发送电子邮件时或以某种方式完成工作(没有崩溃),清除保存的数据。但是,每次活动打开时,请检查Database
是否存在任何文本,如果存在任何文本,请将其加载到您的邮件EditText
。因此,如果活动崩溃,您可以再次加载最后输入的数据。
编辑:为了获得更好的效果,请不要将每个键入的字符保存到Database
。相反,您可以通过检测white space
个字符来检测每个单词并保存它。
作为SharedPreferences和SQLite Databases的指南,请使用指定的链接。
答案 1 :(得分:0)
您应该查看TextWatcher和Data Storage
示例:
edittextMail.addTextChangedListener(textwatcher);
private TextWatcher textwatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable aChar) {
}
@Override
public void beforeTextChanged(CharSequence aChar, int aStart, int aCount, int aAfter) {
}
@Override
public void onTextChanged(CharSequence aChar, int aStart, int aCount, int aAfter) {
saveData();
}
};
private void saveData() {
SharedPreferences sharedPref = this.getSharedPreferences("sharedkey", MODE_WORLD_READABLE);
SharedPreferences.Editor sharedPrefEditor = sharedPref.edit();
sharedPrefEditor.putString("textsaved", editText.getText().toString());
sharedPrefEditor.commit();
}
private void retrieveData() {
SharedPreferences sharedPref = this.getSharedPreferences("sharedkey", MODE_WORLD_READABLE);
editText.setText(sharedPref.getString("textsaved", "No string retrieved."));
}
答案 2 :(得分:0)
我在我的应用中使用此方法。也许它可以帮助你处理你的情况。
在 onPause()方法
中@Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor editor = getPreferences(0).edit();
editor.putString("text", txtPostToWall.getText().toString());
editor.putInt("selection-start", txtPostToWall.getSelectionStart());
editor.putInt("selection-end", txtPostToWall.getSelectionEnd());
editor.commit();
}
然后,要在 onResume()方法中检索已保存的数据
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
SharedPreferences prefs = getPreferences(0);
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
txtPostToWall.setText(restoredText, BufferType.EDITABLE);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);
if (selectionStart != -1 && selectionEnd != -1) {
txtPostToWall.setSelection(selectionStart, selectionEnd);
}
}
}
希望它有所帮助。