android хранение массива сериализованных объектов в файле

#android #file #serialization

#Android #файл #сериализация

Вопрос:

Я хочу сохранить список массивов объектов в файле, чтобы получить к ним доступ после повторного открытия приложения.

 public class SmsMessage implements Serializable {

    public static enum MessageType {
        Sent,
        Received;
    };

    private String body;
    private Date date;
    private MessageType type;

    public SmsMessage(String _body, Date _date, MessageType _type) {
        body = _body;
        date = _date;
        type = _type;

    }
  

}

Вот и весь класс. Я сохраняю его следующим образом:

 FileOutputStream fout = null;
ObjectOutputStream out = null;
    try {
        fout = context.getApplicationContext()
                    .openFileOutput(FILENAME, Context.MODE_PRIVATE);
        out = new ObjectOutputStream(fout);
        out.writeObject(list);
        out.close();

    } catch (IOException ioe) {
        System.out.println("Error in save method");

    } finally {
        out.close();
        fout.close();
}
  

и прочитайте это так:

 ObjectInputStream in = null;
FileInputStream fis = null;
    try {
        fis = context.getApplicationContext().openFileInput(FILENAME);
        in = new ObjectInputStream(fis);
        ArrayList<SmsMessage> list = null;
        list = (ArrayList<SmsMessage>)in.readObject();
    } catch (Exception ex) {
        System.out.println("Error in get method");
    } finally {
        in.close();
        fis.close();
}
  

Этот код не работает — я имею в виду, когда я сохраняю полный список массивов и завершаю работу приложения, он ничего не возвращает, когда я пытаюсь прочитать его снова при открытии приложения. Что здесь не так?

Ответ №1:

Инициализируйте следующим образом:

     fout=new FileOutputStream(FILENAME));
  

после завершения.writeObject(список); добавьте эту строку

      out.flush();   
  

аналогично инициализировать

       fis = new FileInputStream((FILENAME));
  

Надеюсь, это сработает …. вы получаете какое-либо сообщение об ошибке в logcat??