Этот метод доступен только в управляемом режиме ошибки по сортировке - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть 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. Работает, если не добавлена ​​функция сортировки. В противном случае выводится ошибка.

Как сортировать сообщения по идентификатору и как перейти в управляемый режим?

    public RealmList<Message> getSelectedMessages() {

    RealmList<Message> selectedMessages = new RealmList<>();
    selectedMessages.addAll(batchSelected);
    selectedMessages.sort("id", Sort.ASCENDING);

    return selectedMessages;
   }

Журнал ошибок:

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.android.android.debug, PID: 19653 java.lang.UnsupportedOperationException: этот метод доступен только в управляемом режиме. в io.realm.RealmList.sort (RealmList.java:511) в com.android.android.Model.getSelectedMessages (Model.java:146) android.os.Handler.handleCallback (Handler.java:751) в android.os.Handler.dispatchMessage (Handler.java:95) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java:6823) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1563) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1451)

1 Ответ

0 голосов
/ 26 апреля 2018

RealmList selectedMessages = new RealmList <> ();

Это неуправляемый RealmList, который в основном работает как ArrayList.

Если это то, что вы хотите, тогда Realm не может отсортировать его, поскольку он не имеет ничего общего с Realm, но сработает следующее:

Collections.sort(selectedMessages, new Comparator<Message>() { ...

Однако, если вы хотите иметь управляемый RealmList, это возможно только в том случае, если вы извлекаете поле RealmList из управляемого RealmObject, полученного из Realm.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...