Как сохранить список ArrayList в файл? Что я делаю не так?
Я использовал этот вопрос SO, чтобы помочь мне с сериализуемыми объектами.:
как сериализовать ArrayList на Android
и я использовал этот вопрос SO о том, как написать список массивов:
Однако, когда я пытаюсь записать в файл, я получаю сообщение об ошибке:
java.io.NotSerializableException: в
java.io.ObjectOutputStream.writeObject в
com.mycompany.MyClass.saveData
Вот MyClass, который пытается сохранить файл
private ArrayList < MyCustomObject > arrayList;
private File dataFile;
private String FILE_NAME = "FILE_DATA.dat";
public void init(final Context context) {
this.appContext = context;
dataFile = new File(appContext.getFilesDir(), FILE_NAME);
if (dataFile.exists()) {
loadData();
} else {
try {
dataFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
arrayList = new ArrayList < MyCustomObject > ();
saveData();
}
}
private void saveData() {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(dataFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fos != null) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(fos);
if (oos != null) {
oos.writeObject(arrayList);
}
assert oos != null;
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void loadData() {
FileInputStream fis = null;
try {
fis = new FileInputStream(dataFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fis != null) {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(fis);
if (ois != null) {
try {
arrayList = (ArrayList < MyCustomObject > ) ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else {
}
assert ois != null;
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Вот MyCustomObject
public class MyCustomObject implements Serializable {
public String myname = "";
public String someOtherItem = "";
public int aNumber = 0;
public MyCustomObject getCustomObject() {
return this;
}
}
arrayList
экземпляраMyClass
или сам экземплярMyClass
? - person clownba0t   schedule 11.11.2016MyClass
, кажется, имеет членContext
(см.this.appContext
в методеinit
), который, конечно, не сериализуем! - person clownba0t   schedule 11.11.2016MyClass
, верно? В противном случае вы не увидитеcom.mycompany.MyClass.saveData
в трассировке стека исключений. Простая реализация интерфейсаSerializable
не делает класс сериализуемым волшебным образом — именно для этого и предназначенNotSerializableException
. В опубликованной вами трассировке стека отсутствуют данные, но я ожидаю, что вы получили их, потому что Android пытался сериализовать переменную-членContext
дляMyClass
, которая, как я уже сказал, не сериализуема. - person clownba0t   schedule 11.11.2016MyClass
для сериализацииArrayList
изMyCustomObject
экземпляров, потому чтоArrayList
сам реализует интерфейсSerializable
, а рассматриваемыйArrayList
содержитMyCustomObject
экземпляров, которые также сериализуемы. Взгляните на developer.android.com/reference/java/io/Serializable. html для более подробной информации. - person clownba0t   schedule 11.11.2016