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

时间:2013-05-17 17:53:28

标签: java android

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

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

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

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

4 个答案:

答案 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)

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

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