2010-09-02 2 views

ответ

3

Это зависит от того, хотите ли вы сохранить файл на внутреннем или внешнем носителе. Для оба ситуаций есть большие образцы на сайте Android Dev: http://developer.android.com/guide/topics/data/data-storage.html - это должно определенно помочь

+0

Я хочу сохранить его на внутреннем. Im просматривает ObjectOutputStream сейчас и его интерес интересен, но не знаю почему, не может получить «fos = openFileOutput (имя файла, Context.MODE_PRIVATE)»; для работы, он не принимает мой параметр имени файла String ... что это за черт ???? – Fabien

+0

Ive узнал, что это проблема контекста. – Fabien

11

Открыть файл с помощью openFileOutput() (http://developer.android.com/guide/topics/data/data-storage.html#filesInternal), чем использовать ObjectOutputStream (http://download.oracle.com/javase/1.4.2/docs/api/java/io/ObjectOutputStream.html), чтобы записать объект в файл.

Используйте их злые двойники openFileInput() и ObjectInputStream(), чтобы отменить процесс.

0

Вот пример, приведенный в предложении @ yayay. Обратите внимание, что с использованием readObject() возвращается Object, поэтому вам нужно будет выполнить бросок, хотя компилятор будет жаловаться на то, что это неконтролируемый отбор. Тем не менее, я все равно могу запустить свой код. Вы можете больше узнать о проблеме литья here.

Просто убедитесь, что ваш класс (в моем случае, ListItemsModel) сериализует, потому что writeObject() будет сериализовать объект, и readObject() будет десериализацией его. Если это не так (вы не получаете постоянства, а logcat выбрасывает NotSerializableException), то убедитесь, что ваш класс реализует java.io.Serializable, и вам хорошо идти. Обратите внимание: никакие методы не требуют реализации в этом интерфейсе. Если ваш класс не может реализовать Serializable и работать (например, сторонние классы библиотеки), this link поможет вам сериализовать ваш объект.

private void readItems() { 

     FileInputStream fis = null; 
     try { 
      fis = openFileInput("groceries"); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     try { 
      ObjectInputStream ois = new ObjectInputStream(fis); 
      ArrayList<ListItemsModel> list = (ArrayList<ListItemsModel>) ois.readObject(); 
     } catch (IOException | ClassNotFoundException e) { 
      e.printStackTrace(); 
} 

private void writeItems() { 

     FileOutputStream fos = null; 
     try { 
      fos = openFileOutput("groceries", Context.MODE_PRIVATE); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     try { 
      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(itemsList); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 
Смежные вопросы