メールアプリがあります。メール テキスト ボックスに、1000 語を超える長いテキストを入力する必要があります。何かが起きてアクティビティがクラッシュすると、データが失われます。クラッシュ後にアクティビティを再度開いたときに、入力したメール全体が失われることなくテキスト ボックスに表示されたままになるように、データを保存するにはどうすればよいですか?
3 に答える
リスナーをメールに設定EditText
し、ユーザーが入力したテキストをDatabase
、または に保存SharePreferences
し、最後にユーザーがメールを送信するか、何らかの形で (クラッシュせずに) ジョブを終了すると、保存されたデータをクリアします。ただし、アクティビティが開くたびに、Database
そこにテキストが存在するかどうかを確認し、存在する場合はそれをメールにロードしますEditText
。そのため、アクティビティがクラッシュした場合は、最後に入力したデータを再度読み込むことができます。
EDIT : パフォーマンスを向上させるために、入力した各文字を に保存しないでくださいDatabase
。代わりに、文字を検出することで、各単語を検出して保存できますwhite space
。
SharedPreferencesおよびSQLite Databasesのガイドとして、指定されたリンクを使用してください。
TextWatcherとデータストレージをチェックする必要があります
例:
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."));
}
私は自分のアプリでこの方法を使用しています。おそらくそれはあなたの状況に役立つかもしれません。
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);
}
}
}
それが役に立てば幸い。