【问题标题】:Add/Update realmObject in RealmList在 RealmList 中添加/更新 realmObject
【发布时间】:2017-04-11 14:46:10
【问题描述】:

我有一个领域列表,比如领域对象中的学生列表,比如班级。我想请求给定班级的学生名单,并在 studentList 中更新相同的学生名单。 服务器返回的 studentList 可能包含旧学生和新学生。因此,我希望我的 realmList 更新老学生的信息以及添加新学生(如果有的话)。

我所做的是,

  1. 使用 size == serverReturnedStudentList.size() 启动循环
  2. 在循环中创建学生并添加到领域(使用 realm.copyToRealmOrUpdate(student))
  3. 从第 2 步收到托管学生对象。
  4. 获取班级 X 的学生列表并检查学生列表是否包含该 managedObject。
  5. 如果没有,将学生添加到学生列表中,否则什么也不做。

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

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

另一个问题是,我有“n”个班级和每个班级下的“x”个部分。我正在并行发出 n.x 个请求,当我尝试启动 asyncExecutions n.x 次时,我得到池大小限制异常(这很明显)并且我无法在 UI 线程上运行它,因为我的 UI 在 3-5 秒内无响应(而每个学生列表的循环都通过每个学生的 executeTransaction 执行)

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

提前致谢。干杯!

【问题讨论】:

  • multiple entries starts displaying in realmList. What would be the best approach to handle this scenario?你有@PrimaryKey吗?
  • 另外,不要为每个学生执行交易,我不知道你为什么要这样做。
  • @EpicPandaForce 是的,我确实有每个学生对象的主键并进一步澄清,学生说 x 只有一个对象,但如果我跳过 studentList,studentList 中有多个条目.contains(studentX) 将 studentX 添加到 studentList 之前的步骤。
  • @EpicPandaForce - 另一种选择是在 realmTransaction 中遍历刚刚创建的学生(realmObjects)的学生列表,首先将对象添加到领域以获取托管对象,然后检查该托管对象是否已经存在领域学生名单。如果不是,则将该托管对象添加到 realmList。我关心的是何时将 realmObject(managedStudent) 添加到 realmList(realmStudentList) 以及何时仅更新旧的 realmObject(managedStudent)。
  • 考虑添加代码。我读 Java 比英文伪代码好。 :P

标签: realm realm-list


【解决方案1】:

这种方法对我来说似乎没问题。您需要了解的一件事是,用于更新 realmList 的 copyToRealmOrUpdate() 不会复制具有相同 主键 的条目的数据。

【讨论】:

  • 是的,我理解 copyToRealmOrUpdate() 背后的概念,是的,我确实为每个学生对象都有一个主键,并进一步澄清,学生说 x 只有一个对象,但有多个条目如果我在将 studentX 添加到 studentList 之前跳过 studentList.contains(studentX) 步骤,则适用于 studentList 中的 studentX。
  • 所以让我来纠正一下 - 有一个 studentList ,其中包含许多关于 studentX 和其他人的条目。我现在假设您正在使用 studentList.contains(studentX) 将 studentX 从列表中分离出来并尝试更新 studentX。是吗?
  • 我没有完全理解你。如果列表中不存在,我想要将学生添加到 studentList 中,或者只是更新列表中已经存在的学生的信息。如果我们有一个学生已经存在/附加到一个 studentList 并且我执行了 copyToRealmOrUpdate(unManagedStudent),那么信息将被更新并且不需要做任何其他事情。但如果学生列表中没有这样的学生,我仍然需要执行 copyToRealmOrUpdate(unManagedStudent) 以及将 nowManagedStudent 添加到 realmList 的另一步骤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多