Вот проверенный пример предложения @ 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();
}
}