我有这个方法,我希望在交易完成时返回值,但我不能。这是我的代码
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;
}
我该怎么办?
答案 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
}
}
您还需要删除侦听器以避免任何内存泄漏。