我正在研究一个安装在学生列表中的Android应用程序,以便在基于列表的活动中显示。该应用程序有两个组件。有一个服务器通过xml响应当前活动学生的列表和应用程序端的数据库,该数据库存储这些学生的一些细节(姓名,年龄等)。我想要一种同步这两个数据源的方法。当应用程序启动时,我想检查xml以查看是否添加/删除了服务器上的学生并相应地更新了数据库。
我会在登录时将xml列表解析为学生对象。有没有办法将整个对象存储/检索到android支持的数据库中,所以我可以直接比较看看更新/删除的内容?它最终会像
一样if (serverStudent[0].name == dbStudent[0].name)
//overwrite dbStudent object with serverStudent fields
实现对象持久性然后在Android中进行比较的最有效/轻量级方法是什么?
答案 0 :(得分:3)
这是我过去使用过的方法:
如果数据库中的对象发生更改,请使用timestamp列存储该时间。当应用程序在启动时连接时,只需检查app db中的每个时间戳与服务器db中每个对象的时间戳。如果时间戳匹配,则不执行任何操作。如果时间戳不匹配,请从服务器检索更新的记录。确保使用足够详细的时间戳(通常低至毫秒或微秒)。
关于时间戳的好处是,如果您不希望服务器数据覆盖应用程序数据,您可以查看哪个更新,并保留该对象(如果它们都已被编辑)。只是添加一些额外的想法!
答案 1 :(得分:1)
你可以这样做 -
public class StudentRecord {
Vector<StudentData> studentDatas;
public StudentRecord()
{
studentDatas = new Vector<StudentData>();
}
public Vector<StudentData> getRecords() {
return studentDatas;
}
public void setRecords(Vector<StudentData> 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();
}
答案 2 :(得分:0)
查看这些库:
http://www.datadroidlib.com/
https://github.com/octo-online/robospice
我相信两者都能为您的情况提供解决方案。
或者你可以推出自己的解决方案......基本上你会想要创建一个服务或asynctask进行同步,在你的学生对象中你可以创建一个构造函数,你可以传递一个id并让它拉出适当的从本地数据库中记录,然后制作一个比较方法,如果有更新的信息,将会更新。
答案 3 :(得分:0)
我不确定我是否理解你的问题。但据我所知,我会做这样的事情。