如何在Realm交易成功时返回价值?

时间:2018-05-07 03:29:13

标签: android transactions realm

我有这个方法,我希望在交易完成时返回值,但我不能。这是我的代码

public List<Group> getConversations() {

        final RealmResults<Group> conversations;

        try {

            mRealm = Realm.getDefaultInstance();
            mRealm.executeTransactionAsync(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {

                    RealmResults<Group> conversations = realm.where(Group.class).findAllSorted("time", Sort.DESCENDING);
                    cursorConversation(conversations);
                }
            }, new Realm.Transaction.OnSuccess() {
                @Override
                public void onSuccess() {
                   //return conversation
                }
            });
        }

return null;

    }

我该怎么办?

2 个答案:

答案 0 :(得分:1)

我不确定你在cursorConversation(..)做了什么,但你可以对Realm的返回值使用相同的方法。

试一试

public List<Group> getConversations() {

    try (Realm realm = Realm.getDefaultInstance()) {

        return realm.copyFromRealm(realm.where(Group.class).findAllSorted("time", Sort.DESCENDING));
    }

}

答案 1 :(得分:0)

您无需为了获得对话而运行交易。您可以在领域数据库上运行查询,并为结果添加更改侦听器。查询完成后,它会使用RealmResults<Converstaion>调用该更改侦听器,请检查此link以获取更多信息。

这样的东西
public void listenToConversations(RealmChangeListener<RealmResults<Conversation>> listener) {
     RealmResults<Conversations> conversations = realm.where(Group.class).sort("time", Sort.DESCENDING).findAllAsync();
     conversations.addChangeListener(listener);
}

监听器就像

listener = new RealmChangeListener<RealmResults<Conversations>>() {
           \@Override
           public void onChange(RealmResults<Conversations> conversations) {
               // React to change
           }
       }

您还需要删除侦听器以避免任何内存泄漏。