3

メールアプリがあります。メール テキスト ボックスに、1000 語を超える長いテキストを入力する必要があります。何かが起きてアクティビティがクラッシュすると、データが失われます。クラッシュ後にアクティビティを再度開いたときに、入力したメール全体が失われることなくテキスト ボックスに表示されたままになるように、データを保存するにはどうすればよいですか?

4

3 に答える 3

2

リスナーをメールに設定EditTextし、ユーザーが入力したテキストをDatabase、または に保存SharePreferencesし、最後にユーザーがメールを送信するか、何らかの形で (クラッシュせずに) ジョブを終了すると、保存されたデータをクリアします。ただし、アクティビティが開くたびに、Databaseそこにテキストが存在するかどうかを確認し、存在する場合はそれをメールにロードしますEditText。そのため、アクティビティがクラッシュした場合は、最後に入力したデータを再度読み込むことができます。

EDIT : パフォーマンスを向上させるために、入力した各文字を に保存しないでくださいDatabase。代わりに、文字を検出することで、各単語を検出して保存できますwhite space

SharedPreferencesおよびSQLite Databasesのガイドとして、指定されたリンクを使用してください。

于 2012-05-02T05:24:27.563 に答える
0

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."));
}
于 2012-05-02T05:14:56.490 に答える
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 に答える