2017-04-11 95 views
1

我有一个realmList,比如realmObject中的studentsList,比如说class。我想申请一个给定班级的学生列表,并在studentList中更新它。 服务器返回的studentList可能包含旧的和新的学生。所以我希望我的realmList能够为老学生更新信息,以及增加新学生(如果有的话)。在RealmList中添加/更新realmObject

我做了什么,

  1. 开始与大小循环== serverReturnedStudentList.size()
  2. 环路内创建学生和领域增加(使用realm.copyToRealmOrUpdate(学生))
  3. 从步骤2接收到托管学生对象。
  4. 获取X类的学生列表,并检查studentList是否包含该托管对象。
  5. 如果不是,则将学生添加到studentList中,否则什么也不做。

它正在按预期工作,但我知道这不是正确的做法。如果我跳过“包含”检查(@ step4)并直接将管理对象添加到realmList,则多个条目将以realmList开始显示。

什么是处理这种情况的最佳方法?

另一个问题是,我在每个类下有'n'个类和'x'部分。我并行发出nx个请求,当我尝试启动asyncExecutions n次,我得到了池大小限制异常(这是显而易见的),我无法在UI线程上运行,因为我的UI在3-5秒内无响应(while每个studentList的循环执行executeTransaction为每个学生)

任何帮助/建议将不胜感激。

在此先感谢。干杯!

+0

'多个条目开始在realmList中显示。处理这种情况的最佳方法是什么?'你有'@ PrimaryKey'吗? – EpicPandaForce

+0

另外,不要为每个学生执行交易,我不确定你为什么这样做。 – EpicPandaForce

+0

@EpicPandaForce是的,我确实有一个主键,每个学生对象,并进一步澄清,只有一个对象为学生说x,但有多个条目是studentX在studentList,如果我跳过studentList.contains(studentX)之前的步骤将studentX添加到studentList。 – AndoAiron

回答

0

该方法对我来说似乎没问题。有一件事你需要明白,copyToRealmOrUpdate()更新你的realmList不会复制相同的条目数据主键

+0

是的我理解copyToRealmOrUpdate()和背后的概念,并且我确实有每个学生对象的主键并进一步阐明,学生说只有一个单一的对象x,但studentList中有多个条目用于studentX在将studentX添加到studentList之前,我跳过studentList.contains(studentX)步骤。 – AndoAiron

+0

所以我让这个正确的 - 有studentList和其他包含许多条目的studentList。我现在假设你用studentList.contains(studentX)将studentX从列表中分离出来并尝试更新studentX。是吗? –

+0

我没有完全明白你的意思。我想要的是将学生添加到studentList中,如果没有出现在列表中或者只是为了更新列表中已存在的学生的信息。如果我们有一个已经存在/附加到studentList的学生,并且我执行了copyToRealmOrUpdate(unManagedStudent),则信息将被更新并且不需要做其他事情。但是如果这样的学生不在studentList中,我仍然需要执行copyToRealmOrUpdate(unManagedStudent)以及将nowManagedStudent添加到realmList的另一个步骤。 – AndoAiron