2011-07-19 4 views
0

J'essaie de créer une application Android simple qui enregistre un texte à partir d'un formulaire EditText et le stocke dans la mémoire interne. Tout semble fonctionner correctement (le message "Saved" apparaît) sauf lorsque je quitte l'activité et que je la redémarre, le texte sauvegardé à partir du fichier ne se charge pas du tout. Est-ce que j'ai râté quelque chose?Fichier non enregistré dans Android

public class ModifyInfo extends Activity{ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.edit); 

    Bundle extras = getIntent().getExtras(); 
    if(extras != null){ 
     int dayNum = extras.getInt("day"); 
     String dayName = ""; 

     switch(dayNum){ 
     case 1: 
      dayName = this.getString(R.string.dayMon); 
      break; 
     case 2: 
      dayName = this.getString(R.string.dayTue); 
      break; 
     case 3: 
      dayName = this.getString(R.string.dayWed); 
      break; 
     case 4: 
      dayName = this.getString(R.string.dayThu); 
      break; 
     case 5: 
      dayName = this.getString(R.string.dayFri); 
      break; 
     case 6: 
      dayName = this.getString(R.string.daySat); 
      break; 
     default: 
      dayName = this.getString(R.string.daySun); 
      break; 
     } 

     final TextView dayText = (TextView) findViewById(R.id.dayName); 
     final TextView editData = (TextView) findViewById(R.id.editData); 
     final Button save = (Button) findViewById(R.id.buttonSave); 
     final Button clear = (Button) findViewById(R.id.buttonClear); 
     final String Day = dayName; 

     dayText.setText(dayName); 

     clear.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       editData.setText(""); 
      } 
     }); 

     save.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String FILEOUTPUT = Day + ".txt"; 

       try { 
        String string = editData.getText().toString(); 

        FileOutputStream fos = openFileOutput(FILEOUTPUT, Context.MODE_PRIVATE); 
        fos.write(string.getBytes()); 
        fos.close(); 

        Toast.makeText(ModifyInfo.this, "Saved", Toast.LENGTH_SHORT).show(); 
       } catch (IOException e) { 
        Toast.makeText(ModifyInfo.this, "Save error", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

     File FILEINPUT = new File(Day + ".txt"); 

     try { 
      BufferedReader bfr = new BufferedReader(new FileReader(FILEINPUT)); 
      String line; 

      while ((line = bfr.readLine()) != null) 
      { 
       editData.setText(line); 
      } 

      bfr.close(); 

     } catch (Exception e) { 
      editData.setText(""); 
     } 
    } 
} 

}

+0

Je voudrais améliorer la gestion des exceptions. En général, ce n'est pas une bonne habitude d'attraper une instance de classe Exception. Vous devriez mieux enregistrer les exceptions afin que vous sachiez quand elles sont lancées. – gregory561

Répondre

0

Il est possible qu'Android verrouille les fichiers de certains dossiers et vous ne pouvez pas les modifier. Vous pouvez utiliser des préférences partagées ou des objets statiques.

+0

Dois-je définir une autorisation? –

+0

Je ne pouvais pas le définir. Vérifiez-le depuis os voir les propriétés du fichier. –

+0

L'utilisation de SharedPreferences fait l'affaire. Merci beaucoup! –

1

Vous pouvez lire \ n ou tel des espaces de la dernière ligne du fichier, puisque vous appelez editData.setText (ligne); , ce qui réinitialise le texte à la ligne actuelle. Vous pouvez également rencontrer une exception, dans ce cas, vous gérez cette exception en désactivant editText.

Il devrait être comme ceci:

try { 
     BufferedReader bfr = new BufferedReader(new FileReader(FILEINPUT)); 
     String line; 
     String fullText = ""; 

     while ((line = bfr.readLine()) != null) 
     { 
      fullText += line; 
     } 

     bfr.close(); 

     editData.setText(fullText); 

    } catch (Exception e) { 
     editData.setText(""); 
    } 

Selon votre clarification, vous devez vérifier que vous ouvrez votre fichier correctement comme indiqué dans: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

Pour lire un fichier de stockage interne:

1. Call openFileInput() and pass it the name of the file to read. This returns a FileInputStream. 
2. Read bytes from the file with read(). 
3. Then close the stream with close(). 

Vous essayez d'ouvrir en utilisant BufferedReader à la place.

+0

Il continue de renvoyer une exception de fichier introuvable, ce qui signifie que le fichier n'est pas correctement stocké, voire pas du tout. Y at-il un problème avec save.setOnClickListener? –

+0

J'ai révisé ma réponse. Pourriez-vous s'il vous plaît vérifier avec openFileInput()? – faraday

+0

Un grand merci pour votre réponse, mais j'ai réussi à le réparer en utilisant SharedPreferences, ce qui s'avère beaucoup plus simple. Désolé pour le dérangement. –

Questions connexes