ti-enxame.com

android o que há de errado com o openFileOutput?

Estou tentando usar a função openFileOutput, mas não compila e não reconhece a função. Estou usando Android sdk 1.6. Esse é um problema do sdk? Isso é um problema de parâmetro?

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();
    }
}
30
Fabien

Seu método deve ser o seguinte. Recebe um contexto extra como parâmetro. Para esse método, você pode passar seu Serviço ou Atividade

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();
        }
    }
56
naikus

Você está tentando invocar o método não estático do contexto estático (seu método possui modificador estático). Você precisa tornar seu método não-estático ou passar em uma instância de Context (instância de atividade na maioria dos casos) e invocar o método no objeto.

5
Konstantin Burov

Além disso, você não pode openOutputStream em um caminho. Isso causa esta exceção:

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

Para corrigir isso, você precisa criar um objeto de arquivo e apenas criá-lo assim:

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());
}
2
phyatt