发生意外崩溃时如何保存活动数据

时间:2012-05-02 05:06:03

标签: android android-activity textview

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

3 个答案:

答案 0 :(得分:2)

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

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

作为SharedPreferencesSQLite Databases的指南,请使用指定的链接。

答案 1 :(得分: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."));
}

答案 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);
            }
        }
    }

希望它有所帮助。