Android, как сохранить объект в файл? - PullRequest
8 голосов
/ 02 сентября 2010

Кто-нибудь знает, как сохранить и восстановить объект в файл на Android?

Ответы [ 4 ]

11 голосов
/ 24 июля 2011

Откройте файл, используя 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 () для обратного процесса.

3 голосов
/ 02 сентября 2010

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

1 голос
/ 08 сентября 2010
0 голосов
/ 13 мая 2016

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

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

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