Realm.copyFromRealm вызывает доступ к Realm из неверного потока.Является ли это возможным? - PullRequest
0 голосов
/ 13 февраля 2019

Доступ к области из неверного потока.Доступ к объектам области возможен только в том потоке, в котором они были созданы.

Я выполняю службу аварийной сигнализации, используя базу данных области.

Поэтому, чтобы получить данные о времени, я должен получить доступ кобъект, созданный в другом потоке.

Итак, я копирую список областей, как показано ниже, но в этой части появляется незаконное исключение.

Есть ли другое решение?

Realm realm = Realm.getDefaultInstance();

List<DayWorkType> dayWorkTypesCopied = realm.copyFromRealm(dayWorkTypes);
//FAILED HERE

realm.close();

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Перед использованием dayWorkTypes вам нужно извлечь их идентификаторы и использовать их в запросе от другого экземпляра Realm

//in your first/main thread
Set<String> dayWorkTypeIds = dayWorkTypes.map(d -> d.getId());

...

//in your new thread just query realm
Realm realm = Realm.getDefaultInstance();
RealmResults<DayWorkType> dayWorkTypes2 = realm
        .where(DayWorkType.class)
        .in("id", dayWorkTypeIds.toArray(new String[0]);

//now you can use dayWorkTypes2 as you want in your thread
0 голосов
/ 13 февраля 2019
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        Realm realm = Realm.getDefaultInstance();
        try {
            List<DayWorkType> dayWorkTypesCopied = realm.copyFromRealm(dayWorkTypes);
        } finally {
            realm.close();
        }
    }
});

thread.start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...