5

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

我将在登录时将 xml 列表解析为学生对象。有什么方法可以将整个对象存储/检索到支持 android 的数据库中,以便我可以进行直接比较以查看要更新/删除的内容?它最终会像

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

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

4

4 回答 4

3

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

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

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

于 2013-05-20T04:35:18.727 回答
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();
        }
于 2013-05-26T17:08:53.567 回答
0

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

或者你可以推出你自己的解决方案......基本上你会想要创建一个服务或异步任务来进行同步,在你的学生对象中你可以创建一个构造函数,你可以将一个 id 传递给它并让它从你的local db 然后进行比较方法,如果有更新的信息可用,该方法将更新。

于 2013-05-20T03:50:50.807 回答
0

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

  • 在服务器端发送保存 json 学生对象的 Json 数组。
  • 在 android 端创建类似的 Student 类并根据需要覆盖 equals 方法。
  • 然后对每个学生用 equals 方法检查他们是否相等,并采取相应的行动。
  • 如果您想在学生对象数组中进行更快的搜索,请应用哈希映射而不是数组。
于 2013-05-20T04:28:06.337 回答