Android 域事务成功时如何返回值?

Android 域事务成功时如何返回值?,android,transactions,realm,Android,Transactions,Realm,我有这个方法,我想在交易完成时返回值,但我不能。这是我的密码 public List<Group> getConversations() { final RealmResults<Group> conversations; try { mRealm = Realm.getDefaultInstance(); mRealm.executeTransactionAsync(new 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;

    }
public List getConversations(){
最终结果对话;
试一试{
mRealm=Realm.getDefaultInstance();
mRealm.executeTransactionAsync(新领域.事务(){
@凌驾
公共void执行(领域){
RealmResults conversations=realm.where(Group.class).findAllSorted(“时间”,Sort.DESCENDING);
光标对话(对话);
}
},new Realm.Transaction.OnSuccess(){
@凌驾
成功时的公共无效(){
//回话
}
});
}
返回null;
}

我该怎么办?

获取对话不需要运行事务。您可以在领域数据库上运行查询,并向结果中添加更改侦听器。当查询完成时,它将调用带有
RealmResults
的change listener,更多信息请查看此项

差不多

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
           }
       }
public void ListentConversations(RealmChangeListener侦听器){
RealmResults conversations=realm.where(Group.class).sort(“时间”,sort.DESCENDING.findalsync();
addChangeListener(listener);
}
这里的听众有点像

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
           }
       }
listener=newrealmchangestener(){
\@凌驾
公共void onChange(RealmResults对话){
//对变化作出反应
}
}

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

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

试一试

public List<Group> getConversations() {

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

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

}
public List getConversations(){
try(Realm-Realm=Realm.getDefaultInstance()){
返回realm.copyFromRealm(realm.where(Group.class).findAllSorted(“time”,Sort.DESCENDING));
}
}

这根本不起作用。您将获得一个非法的线程访问异常。您在
cursorConversation(…)
中做什么?很乐意提供帮助,欢迎使用堆栈溢出。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。