我有一个邮件应用程序。在我的邮件文本框中,我需要输入超过 1000 字的长文本。如果发生任何事情并且活动崩溃,我的数据就会丢失。如何保存数据,以便当我在崩溃后重新打开我的活动时,整个键入的邮件会保留在文本框中而不会丢失?
问问题
1556 次
3 回答
2
为您的邮件设置一个侦听器,EditText
并在用户键入时将文本保存在Database
或 中SharePreferences
,最后当用户发送电子邮件或以某种方式完成工作(没有崩溃)时,清除保存的数据。但是,每次活动打开时,检查Database
那里是否存在任何文本,如果存在,请将其加载到您的邮件EditText
中。因此,如果活动崩溃,您可以再次加载上次键入的数据。
编辑:为了获得更好的性能,不要将每个键入的字符保存到Database
. 相反,您可以通过检测white space
字符来检测每个单词并保存它。
作为SharedPreferences和SQLite Databases的指南,请使用给出的链接。
于 2012-05-02T05:24:27.563 回答
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);
}
}
}
希望能帮助到你。
于 2012-05-02T05:33:31.630 回答
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."));
}
于 2012-05-02T05:14:56.490 回答