此方法仅在托管模式下按排序错误提供

时间:2018-04-26 09:19:07

标签: android sorting realm

我有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)

1 个答案:

答案 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();