Как я могу хранить arraylist пользовательских объектов?

Я создал arraylist, который состоит из пользовательских объектов. В основном пользователь создаст класс, и каждый раз, когда создается класс, в arraylist добавляется новая лекция (мой пользовательский объект). Мне нужно сохранить созданный arraylist, чтобы классы пользователя были сохранены даже при перезапуске приложения.

По моему мнению, я должен сделать свой класс сериализуемым. Но как именно я это делаю? И затем, как только его сериализовать, что мне делать?

public class Lecture{ public String title; public String startTime; public String endTime; public String day; public boolean classEnabled; public Lecture(String title, String startTime, String endTime, String day, boolean enable){ this.title = title; this.startTime = startTime; this.endTime = endTime; this.day = day; this.classEnabled = enable; } //Getters and setters below 

Solutions Collecting From Web of "Как я могу хранить arraylist пользовательских объектов?"

Вам повезло, все члены вашего класса уже сериалы, поэтому ваш первый шаг – сказать, что Lecture Serializable.

 public class Lecture implements Serializable { public String title; public String startTime; public String endTime; public String day; public boolean classEnabled; public Lecture(String title, String startTime, String endTime, String day, boolean enable){ this.title = title; this.startTime = startTime; this.endTime = endTime; this.day = day; this.classEnabled = enable; } 

Затем вам нужно создать конструктор по умолчанию, поскольку, похоже, требует сериализации. Последнее, что вам нужно написать свой объект в файл. Обычно я использую что-то вроде следующего. Обратите внимание, что это для сохранения состояния игры, поэтому вы можете не использовать каталог кеша.

 private void saveState() { final File cache_dir = this.getCacheDir(); final File suspend_f = new File(cache_dir.getAbsoluteFile() + File.separator + SUSPEND_FILE); FileOutputStream fos = null; ObjectOutputStream oos = null; boolean keep = true; try { fos = new FileOutputStream(suspend_f); oos = new ObjectOutputStream(fos); oos.writeObject(this.gameState); } catch (Exception e) { keep = false; Log.e("MyAppName", "failed to suspend", e); } finally { try { if (oos != null) oos.close(); if (fos != null) fos.close(); if (keep == false) suspend_f.delete(); } catch (Exception e) { /* do nothing */ } } } 

Чтение данных назад довольно симметрично для записи, поэтому я оставил это для этого ответа. Кроме того, по-прежнему существует много предостережений для объектов Serialized, поэтому я предлагаю вам выполнить некоторые поисковые запросы Google и прочитать о Java-сериализации в целом.

Я использую класс в приложении Weather, которое я разрабатываю …

 public class RegionList extends ArrayList<Region> {} // Region implements Serializeable 

Чтобы сохранить, я использую такой код …

 FileOutputStream outStream = new FileOutputStream(Weather.WeatherDir + "/RegionList.dat"); ObjectOutputStream objectOutStream = new ObjectOutputStream(outStream); objectOutStream.writeInt(uk_weather_regions.size()); // Save size first for(Region r:uk_weather_regions) objectOutStream.writeObject(r); objectOutStream.close(); 

ПРИМЕЧАНИЕ. Прежде чем писать объекты Region, я пишу int, чтобы сохранить «размер» списка.

Когда я читаю, я делаю это …

 FileInputStream inStream = new FileInputStream(f); ObjectInputStream objectInStream = new ObjectInputStream(inStream); int count = objectInStream.readInt(); // Get the number of regions RegionList rl = new RegionList(); for (int c=0; c < count; c++) rl.add((Region) objectInStream.readObject()); objectInStream.close(); 

Используйте System.Runtime.Serialization. Вы можете увидеть пример здесь: http://blog.kowalczyk.info/article/Serialization-in-C.html