Realm.copyFromRealm导致来自错误线程的Realm访问。可能吗?

时间:2019-02-13 10:38:44

标签: java android realm

来自错误线程的领域访问。只能在创建对象的线程上访问领域对象。

我通过使用领域数据库进行警报服务。

因此,为了获取“时间”数据,我必须访问在其他线程中创建的对象。

所以我像下面的代码一样复制领域列表,但是在这一部分出现了非法状态异常。

还有其他解决方法吗?

Realm realm = Realm.getDefaultInstance();

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

realm.close();

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在使用dayWorkTypes之前,您需要提取它们的ID并在来自另一个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