存储和比较数据库中的对象

我正在开发一个Android应用程序,它加载到学生列表中,以显示在基于列表的活动中。 该应用程序有两个组件。 有一个服务器通过xml响应当前活跃学生的列表和应用程序端的数据库,该数据库存储这些学生的一些细节(姓名,年龄等)。 我想要一种同步这两个数据源的方法。 当应用程序启动时,我想检查xml以查看是否添加/删除了服务器上的学生并相应地更新了数据库。

我会在登录时将xml列表解析为学生对象。 有没有办法将整个对象存储/检索到android支持的数据库中,所以我可以直接比较以查看更新/删除的内容? 它最终会变成类似的东西

if (serverStudent[0].name == dbStudent[0].name) //overwrite dbStudent object with serverStudent fields 

在Android中实现对象持久性然后比较的最有效/轻量级方法是什么?

这是我过去使用过的方法:

只要数据库中的对象发生更改,请使用时间戳列来存储该时间。 当应用程序在启动时连接时,只需检查app db中的每个时间戳与服务器db中每个对象的时间戳。 如果时间戳匹配,则不执行任何操作。 如果时间戳不匹配,请从服务器检索更新的记录。 确保使用足够详细的时间戳(通常低至毫秒或微秒)。

关于时间戳的好处是,如果您不希望服务器数据覆盖应用程序数据,您可以查看哪个更新,并保留该对象(如果它们都已被编辑)。 只是添加一些额外的想法!

你可以这样做 –

 public class StudentRecord { Vector studentDatas; public StudentRecord() { studentDatas = new Vector(); } public Vector getRecords() { return studentDatas; } public void setRecords(Vector records) { this.studentDatas = records; } public class StudentData { String name,Rollno; public String getRollno() { return Rollno; } public void setRollno(String rollno) { Rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } } } 

当你得到矢量对象studentDatas你可以做这样的事情 –

 for(Object object : record.getRecords()) { data = (StudentData)object; data.getRollno(); data.getName(); } 

看看这些库:
http://www.datadroidlib.com/
https://github.com/octo-online/robospice
我相信两者都能为您的情况提供解决方案

或者你可以推出自己的解决方案…基本上你会想要创建一个服务或asynctask来进行同步,你可以在你的学生对象中创建一个构造函数,你可以传递一个id并从中提取相应的记录。然后,本地数据库会创建一个比较方法,如果有更新的信息,它将更新。

我不确定我是否理解你的问题。但据我所知,我会做这样的事情。

  • 在服务器端发送发送Json数组,该数组包含json学生对象。
  • 在android端创建similer Student类并根据需要覆盖equals方法。
  • 然后为每个学生用等于方法检查他们是否等于并采取相应的行动。
  • 如果要在学生对象数组中进行更快速的搜索,则应用哈希映射而不是数组。