如何存储自定义对象的arraylist?

我创建了一个由自定义对象组成的arraylist。 基本上用户将创建一个类,每次创建一个类时,都会在arraylist中添加一个新的Lecture(我的自定义对象)。 我需要保存生成的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 

  • 如何在SQLite数据库中存储和检索字节数组(图像数据)?
  • 如何使用Content Provider实现复杂的查询?
  • IllegalArgumentException:列无效
  • 在SQLite中使用AND和OR
  • SQLiteConstraintException:错误代码19:约束失败
  • 错误无法执行此操作,因为连接池已关闭
  • 如何使用从主表加载数据的CursorLoader从子表中检索数据?
  • Android JUnit4测试 - 从哪里获取上下文?
  • 你很幸运,你所有class级的成员都已经串行了,所以你的第一步就是说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 */ } } } 

    读回数据与写入非常对称,所以我把它留给了这个答案。 此外,序列化对象仍然有很多警告,所以我建议你做一些谷歌搜索,并阅读一般的Java序列化。

    我正在开发的Weather应用程序中使用一个类…

     public class RegionList extends ArrayList {} // 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