2010-09-02 6 views
24

Im essayant d'utiliser la fonction openFileOutput, mais il ne veut pas compiler ... ne reconnaît pas de fonction. Im en utilisant android sdk 1.6. Est-ce un problème de SDK? Est-ce un problème de paramètre?android quel est le problème avec openFileOutput?

import java.io.FileOutputStream; 
public static void save(String filename, MyObjectClassArray[] theObjectAr) { 
     FileOutputStream fos; 
     try { 
      fos = openFileOutput(filename, Context.MODE_PRIVATE); 


      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(theObjectAr); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 

Répondre

48

Votre méthode doit être la suivante. Prend un contexte supplémentaire en tant que paramètre. Pour cette méthode, vous pouvez passer votre service ou activité

public static void save(String filename, MyObjectClassArray[] theObjectAr, 
    Context ctx) { 
     FileOutputStream fos; 
     try { 
      fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE); 


      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(theObjectAr); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 
+0

merci, c'est ça. – Fabien

+0

Je n'arrivais pas à faire marcher ça. J'ai essayé un contexte passé, 'context.getApplicationContext()', 'Application.instance()' et 'Application.instance(). GetApplicationContext()' pour le ctx ici et il jette toujours FileNotFoundException. –

+2

Il s'avère que j'avais un problème de permissions. Certainement pas évident qu'un problème "Permission Denied" entraîne une exception FileNotFoundException. –

4

Vous essayez d'invoquer une méthode non statique à partir d'un contexte statique (votre méthode a un modificateur statique). Vous devez soit rendre votre méthode non statique ou passer dans une instance de Context (instance d'activité dans la plupart des cas) et appeler la méthode sur l'objet.

+0

Merci, j'ai découvert aussi ce problème. :) – Fabien

1

vous ne pouvez pas non openOutputStream sur un chemin. Il fait cette exception:

java.lang.IllegalArgumentException: File /storage/sdcard0/path/to/file.txt contains a path separator 

Pour résoudre ce problème, vous devez créer un objet de fichier et il suffit de créer comme ceci:

String filename = "/sdcard/path/to/file.txt"; 
File sdCard = Environment.getExternalStorageDirectory(); 
filename = filename.replace("/sdcard", sdCard.getAbsolutePath()); 
File tempFile = new File(filename); 
try 
{ 
    FileOutputStream fOut = new FileOutputStream(tempFile); 
    // fOut.write(); 
    // fOut.getChannel(); 
    // etc... 
    fOut.close(); 
}catch (Exception e) 
{ 
    Log.w(TAG, "FileOutputStream exception: - " + e.toString()); 
}