Realm RealmResults<E>不再原地排序我的数据

3
我有一个RealmResults<Post> mPosts对象,它在社交媒体应用中保存用户的Feed。以前,每当用户创建新帖子时,该帖子会自动添加到列表的开头——因为其日期是最新的,结果按照降序排序。现在,当用户创建新帖子时,帖子被添加到列表底部,就好像它是最老的帖子一样。这在我以前的 Realm 版本中才开始发生,我不确定是哪个版本,但我认为这是一个 bug,所以我更新到了90.0版本,但问题仍然存在。
我尝试过的事情:
- 当用户创建新帖子时,设置realmResults = realmResults.sort("mDateCreated", Sort.DESCENDING)并调用notifyDataSetChanged() - 设置 onChange 监听器,并在 onChange 方法中执行上述语句
我读到过 RealmResults 对象在新的升级后不再原地排序,但是在阅读了几篇SO、github和Realm源代码之后,我仍然找不到如何模拟以前的原地排序功能的结论性信息。任何人知道如何在 Realm 90.0 中保持 RealmResults 对象的排序吗?
更新:我还尝试使用findAllSorted()创建我的 RealmResults 对象,例如RealmResults<Post> mPosts = realm.where(Post.class).findAllSorted("mDateCreated", Sort.DESCENDING),并尝试使用上述方法。仍然不起作用。

请在第一次创建RealmResults时查看https://github.com/realm/realm-java/issues/2710,使用`findAllSorted()`创建它。 RealmResults.sort()将创建一个新的ReaulResults并对其进行排序。 - beeender
忘了提到,但我也尝试过那个。 - the beest
请问您能否分享一些与创建RealmResults和监听器相关的源代码片段? - beeender
@beeender 你想要看什么?我会为你获取。 - the beest
我们进行了一些测试 https://github.com/realm/realm-java/pull/2766,但没有遇到您遇到的同样问题。您能否制作一个示例项目来展示问题并将其发送给我们?如果您想私下分享,请发送至help@realm.io。 - beeender
显示剩余4条评论
1个回答

0
解决了我的问题。我为Post对象创建了一个包装类,并在PostWrapper类中按mDateCreatedRealmResults mPosts对象进行排序。因此,虽然存储在服务器上的PostWrapper记录的日期已设置,并将用于正确排序mPosts;但当它们从服务器接收并存储在对应于mPosts的realm中UserFeedRealm时。当用户在手机上创建新的Post对象时,我设置了Post对象的日期,但没有设置它将存储在其中的PostWrapper对象,因此因为在手机上创建的PostWrapper对象中的mDateCreated为空,所以新的对象被视为mPosts中最旧的PostWrapper
问题似乎是在早期版本的Realm中出现了,但实际上是因为我在早期版本中实现了转发功能,并需要创建一个PostWrapper类来保存Post对象或Repost对象。当我这样做时,我开始将PostWrapper对象存储在mPosts中,而不是Post对象,并开始按照PostWrapper的创建日期而不是它所包含的Post对象的创建日期对mPosts进行排序;因为转发会有与其所转发的帖子不同的创建日期。但那时我正在进行很多更改,所以这种影响并没有被注意到。但归根结底,问题在于我没有初始化必要的变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接