Intereting Posts
«Элемент, который вы пытались купить, не найден». Биллинг для Android в приложении Есть ли большой вариант кучи Android для старых телефонов, обновленных до ICS? Уведомление об обнаружении службы доступности Android Фрагменты остаются после того, как активность Get убита и воссоздана «GoogleApiClient еще не подключен» при выходе из системы при использовании Firebase auth с подписью google Android Virtual Device (AVD) – какой CPU / ABI я должен выбрать? Использование цели Crop Получение java.lang.SecurityException: невозможно найти приложение для вызывающего android.app.ApplicationThreadProxy@4266ae80 Android. При использовании LocationManager.requestLocationUpdates мне нужен WakeLock? Android-приемник SMS не работает Android: Как остановить воспроизведение мультимедиа (mp3) при появлении конкретных миллисекунд? Более быстрая загрузка ListView, быстрее, чем метод Viewholder Быстрый прокрутка большого пальца исчезает при прокрутке AlphabetIndexer Удалите лишние строки после Html.fromHtml () Всегда получать состояние сеанса: CLOSED_LOGIN_FAILED, токен: {токен AccessToken: ACCESS_TOKEN_REMOVED в facebook android sdk3.0. Обновить пользовательский интерфейс из потока

Как я могу хранить 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