Android, что не так с openFileOutput?

Я пытаюсь использовать функцию openFileOutput, но он не хочет компилировать … не распознает функцию. Я использую android sdk 1.6. Это проблема sdk? Это проблема с параметрами?

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

Solutions Collecting From Web of "Android, что не так с openFileOutput?"

Ваш метод должен быть следующим. В качестве параметра вводится дополнительный контекст. К этому методу вы можете передать свою услугу или мероприятие

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

Вы пытаетесь вызвать нестатический метод из статического контекста (ваш метод имеет статический модификатор). Вы либо должны сделать свой метод нестационарным, либо передать экземпляр Context (экземпляр активности в большинстве случаев) и вызвать метод на объекте.

Также вы не можете openOutputStream на пути. Это вызывает это исключение:

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

Чтобы исправить это, вам нужно создать файл-объект и просто создать его следующим образом:

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