java - RealmResult 与适配器的多对多关系

标签 java android realm

我有两个模型(具有相关属性)如下所示:

播放列表.java

@PrimaryKey
String id;
String name;
RealmList<Song> songs;

歌曲.java

@PrimaryKey
String id;
String name;

如您所见,一个播放列表可以包含多首歌曲,而一首歌曲可以属于多个播放列表。

在我的应用程序的一部分中,我使用 RealmBaseAdapter 在 RecyclerView 中显示所有歌曲。我完成这个没问题:

RealmResults<Song> songResult = realm.where(Song.class).findAll();
RealmSongsAdapter realmAdapter = new RealmSongsAdapter(getActivity().getApplicationContext(), songResult , true);
songAdapter.setRealmAdapter(realmAdapter);

我的问题是:我将如何只显示特定播放列表的歌曲?由于 Song.java 没有引用它自己的播放列表,我没有办法获得 RealmResult基于播放列表对象。理想情况下,我想要这样的东西:

Playlist playlist = realm.where(Playlist.class).equalTo("id", playlistID).findFirst();
RealmResults<Song> playlistSongs = playlist.getSongs();

但是playlist.getSongs()返回 RealmList<Song>而不是 RealmResult<Song> .


我找到的一个解决方案是创建一个 RealmQuery基于播放列表中的歌曲 ID,但这似乎违反直觉:

RealmQuery<Song> query = mRealm.where(Song.class);
for (Song song : playlist.getSongs()) {
    query = query.or().equalTo("id", song.getId());
}
RealmResults<Song> results = query.findAll();

另一个问题是每次播放列表歌曲列表更改时我都必须重新创建此查询。

有没有更简单的方法?提前致谢!

最佳答案

这里是来自 Realm 的 Christian。不幸的是,如果您不想维护 RealmList<Playlist>,目前除了您自己找到的方法之外别无他法。 Song 上的字段.也就是说,我们在 TODO 上有一个称为反向链接的概念,它完全适用于这样的用例:https://github.com/realm/realm-java/issues/607

关于java - RealmResult 与适配器的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425398/

相关文章:

java - 重复的类 org.apache.commons

android - 更改切换按钮 Android 的开/关文本

android - 在移动设备上请求桌面站点选项

ios - 在 Realm 中存储字符串数组

java - 使用 java 驱动程序更新 mongodb 需要很长时间?

java - --copyright 标志在 JPackage 中有什么作用?

java - 返回语句可以像 printf 一样格式化吗?

java - 如何覆盖 java 方法并更改参数的可空性?

java - 等待线程间realm-java中的数据更新

ios - 从基于 Siesta 实体构建的 JSON 初始化 Realm 对象失败