2012-05-02 2 views
2

私はメールアプリケーションを持っています。私のメールテキストボックスには、1000語以上の長いテキストを入力する必要があります。何かが起こってアクティビティがクラッシュした場合、私のデータは失われます。クラッシュ後にアクティビティを再オープンすると、入力されたメール全体が損失なくテキストボックスに残りますので、データを保存するにはどうすればよいですか? 、偶発的なクラッシュが発生した場合のアクティビティのデータの保存方法

メール EditTextとユーザーの種類などにリスナーを設定し
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.")); 
} 
+0

ユーザーがテキストを変更すると、テキストを保存する必要があります。 –

答えて

0

あなたはTextWatcherData Storage

例をチェックアウトする必要がありますユーザーが電子メールを送信したり、何らかの形でクラッシュすることなくジョブを終了したりすると、保存されたデータが消去されます。しかし、アクティビティが開かれるたびに、Databaseにテキストが存在するかどうかを確認します。存在する場合は、メールEditTextにロードしてください。したがって、アクティビティがクラッシュした場合は、最後に入力したデータを再度読み込むことができます。

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

を参考にして、SharedPreferencesSQLite Databasesのリンクを使用してください。

2

Databaseで、またはSharePreferencesに、そして時にテキストを保存:

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

はそれが役に立てば幸い方法で

関連する問題