这个 Realm 实例在调用 close() 之前已经关闭了



尝试执行以下代码时,我总是收到异常消息;

java.lang.IllegalStateException:此 Realm 实例已被关闭,因此无法使用。

但是如果我注释掉 database.close(( 调用,那么它工作正常。可能是什么原因呢?

Observable.defer(() -> Observable.create((ObservableOnSubscribe<String>) cacheEmitter -> {
                Realm database = Realm.getDefaultInstance();
                database.executeTransaction(realm -> {
                    RealmResults<ResponseCache> cache = realm.where(ResponseCache.class).findAll();
                    ResponseCache cacheData = new ResponseCache(null, "");
                    for(ResponseCache resCache : cache) {
                        if(resCache.getCategoryId().equals(searchType)) {
                            cacheData = new ResponseCache(resCache);
                            break;
                        }
                    }
                    String cacheResData = cacheData.getSearchResponse();
                    database.close();
                    cacheEmitter.onNext(cacheResData);
                });
            }))

应该是

try(Realm database = Realm.getDefaultInstance()) {
    database.executeTransaction(realm -> {
        RealmResults<ResponseCache> cache = realm.where(ResponseCache.class).findAll();
        ResponseCache cacheData = new ResponseCache(null, "");
        for(ResponseCache resCache : cache) {
            if(resCache.getCategoryId().equals(searchType)) {
                cacheData = new ResponseCache(resCache);
                break;
            }
        }
        String cacheResData = cacheData.getSearchResponse();
        cacheEmitter.onNext(cacheResData);
    });
}

最新更新