3

我有一个邮件应用程序。在我的邮件文本框中,我需要输入超过 1000 字的长文本。如果发生任何事情并且活动崩溃,我的数据就会丢失。如何保存数据,以便当我在崩溃后重新打开我的活动时,整个键入的邮件会保留在文本框中而不会丢失?

4

3 回答 3

2

为您的邮件设置一个侦听器,EditText并在用户键入时将文本保存在Database或 中SharePreferences,最后当用户发送电子邮件或以某种方式完成工作(没有崩溃)时,清除保存的数据。但是,每次活动打开时,检查Database那里是否存在任何文本,如果存在,请将其加载到您的邮件EditText中。因此,如果活动崩溃,您可以再次加载上次键入的数据。

编辑:为了获得更好的性能,不要将每个键入的字符保存到Database. 相反,您可以通过检测white space字符来检测每个单词并保存它。

作为SharedPreferencesSQLite 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

你应该看看TextWatcherData 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 回答