2010-08-16 5 views
1

Il ne semble pas y avoir d'autorisation de manifeste Android à définir pour le fichier io.Pourquoi Android FileOutputStream lance-t-il une exception NullPointerException?

public class Device extends Activity { 
    private static final Configuration config = new Configuration(); 
    ... 
    private boolean applyMenuChoice(MenuItem item) { 
     switch (item.getItemId()) { 
     ... 
     case R.id.menuSave: 
      ... 
      configuration.modify(name, to, from, user); 
      configuration.write(); 
      ... 

public class Configuration extends Activity { 
    private final static String CONFIG = "config.txt"; 
    private static StringBuilder config = new StringBuilder(); 
    ... 
    public void write() { 
     try { 
      FileOutputStream fos = openFileOutput(CONFIG, Context.MODE_PRIVATE); 
      fos.write(config.toString().getBytes()); 
      ... 
+0

Lorsque la méthode d'écriture est invoquée? –

+0

write() est dans la classe Configuration (voir l'extrait ajouté à la question d'origine) et est appelée par applyMenuChoice() dans la classe Device lorsqu'une modification est apportée à la configuration. Le débogueur a été utilisé pour vérifier que la configuration est remplie comme prévu avant toute tentative réelle d'écriture, mais l'exception est levée avant même qu'elle ne tente l'écriture réelle (à l'openFileOutput). Est-il illégal d'utiliser openFileOutput dans un applyMenuChoice? – jacknad

+1

Votre code est très illégal. Vous ne pouvez pas instancier une activité (bien je suppose que vous le pouvez, mais vous n'êtes pas censé le faire) directement avec new(). Si vous souhaitez écrire des données d'une activité dans une autre activité, vous devrez probablement passer les données via un service ou créer une autre méthode write() dans le périphérique – Falmarri

Répondre

1

Le remplacement de l'instanciation illégale d'une activité par des méthodes correctes a résolu ce problème. Merci beaucoup (encore une fois) Falmarri.

0

Où essayez-vous d'écrire votre fichier? Si c'est sur la carte SD de l'appareil, vous devez définir l'autorisation WRITE_EXTERNAL_STORAGE dans votre manifeste android. Vous pouvez également avoir besoin de définir un chemin au lieu de simplement utiliser un nom de fichier.

+0

C'est un petit fichier. Je n'essaie pas d'écrire sur un stockage externe et je suis à peu près certain que openFileOutput n'accepte pas les chemins de fichiers. – jacknad

+0

J'ai ajouté l'autorisation WRITE_EXTERNAL_STORAGE au manifeste pour voir si cela aiderait, mais ce n'est pas le cas, et je ne comprends pas pourquoi cette réponse est marquée comme utile si ce n'est pas le cas (du moins pas dans ce cas). – jacknad

0

L'exception est levée dans ce scénario lorsque ce pointeur est incorrect. Vous avez probablement créé l'activité en utilisant son ctor comme un objet régulier et n'utilisez pas l'activité de début d'une intention. Dans ce cas, invoquer DonT openFileOutput ou this.openFileOutput, mais vous devez envoyer le contexte que vous êtes comme argument à la fonction write(), et utiliser ce contexte, i.e. .:

write(Context context) 
{ 
    context.openFileOutput(...) 
    ... 
Questions connexes