我有LinkedHashSet,我想转移到创建的RealmList并对数据进行排序。
final LinkedHashSet<Message> batchSelected = new LinkedHashSet<>();
public LinkedHashSet<Message> getSelectedItems() {
return new LinkedHashSet<>(batchSelected);
}
public void toggleSelection(Message message) {
if (!batchSelected.remove(message)) {
batchSelected.add(message);
}
}
public void clearSelection() {
batchSelected.clear();
}
此功能用于将数据从batchSelected传输到selectedMessages。如果没有添加排序功能,它正在工作。否则会输出错误。
如何按ID对邮件进行排序?如何进入托管模式?
public RealmList<Message> getSelectedMessages() {
RealmList<Message> selectedMessages = new RealmList<>();
selectedMessages.addAll(batchSelected);
selectedMessages.sort("id", Sort.ASCENDING);
return selectedMessages;
}
错误日志:
E / AndroidRuntime:致命异常:主要流程: com.android.android.debug,PID:19653 java.lang.UnsupportedOperationException:此方法仅可用 在托管模式下。在io.realm.RealmList.sort(RealmList.java:511)at com.android.android.Model.getSelectedMessages(Model.java:146) android.os.Handler.handleCallback(Handler.java:751)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:6823)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1563) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
答案 0 :(得分:0)
RealmList selectedMessages = new RealmList&lt;&gt;();
这是非托管的RealmList,它基本上像ArrayList一样工作。
如果这是你想要的,那么Realm无法对它进行排序,因为它与Realm无关,但是后续工作会有效:
Collections.sort(selectedMessages, new Comparator<Message>() { ...
但是,如果您想拥有一个托管的RealmList,那么只有从您从Realm获取的托管RealmList
中检索RealmObject
字段时才能实现。
Obj obj = realm.where(Obj.class).findFirst(); // managed RealmObject
RealmList<SomeObj> others = obj.getOthers(); // managed RealmList
如果您想要从Realm管理项目集合,那么您应该执行正确的RealmQuery。
RealmResults<Message> selectedMessages = realm.where(Message)
.in("id", batchSelectedIds)
.sort("id", Sort.ASCENDING)
.findAll();