从领域获取更新数据

时间:2016-06-22 09:40:14

标签: android asynchronous realm

从异步放置的域中获取数据的最佳做法是什么?

例如,我想将一些数据写入领域并在事务完成时访问它。这样做的正确方法是什么?

我遇到过,如果我异步地向realm写入数据,我无法从onSuccess回调访问它,除非我在查询上设置RealmChangeListener,这会增加一些令人讨厌的样板并且明显不直观。此外,我需要指定我想听的查询。

RealmList<RealmObject> contents = ...;
RealmResults<RealmWrappedContent> realmResults = realm.where(RealmWrappedContent.class)
                                        .equalTo("id", id)
                                        .findAllAsync();

OnSuccess notWorkingOnSuccess = () -> processResults(realmResults); // realmResults are empty

OnSuccess workingOnSuccess = () -> realmResults.addChangeListener(l -> {
    processResults(l);                                              // realmResults are valid and ready for access
    realmResults.removeChangeListeners();
});                                        

realm.executeTransactionAsync(bgRealm ->
            bgRealm.copyToRealmOrUpdate(contents), notWorkingOnSuccess, onError)  // if we try to access realmResults here, they will be empty

realm.executeTransactionAsync(bgRealm ->
            bgRealm.copyToRealmOrUpdate(contents), workingOnSuccess, onError)    // works fine

所以,问题是:

如何在将数据放入数据库后立即访问它们(而不是陷入回调地狱)?

我们在项目中大量使用RxJava。也许它可以用于帮助情况?我还在想,如果executeTransactionAsync可以返回RealmResults,那么事情就会变得更加容易。

0 个答案:

没有答案