我从realm数据库中获取一些数据,然后异步地在RealmResults
上应用更多过滤器。我已针对每个查询注册了回调RealmChangeListener
,但未触发回调。
以下是摘录:
RealmResults<Tweet> tweetsResults = RealmController
.getInstance()
.getRealm()
.where(Tweet.class)
.isNotNull("entities")
.equalTo("entities.hashtags.text", inputString, Case.INSENSITIVE)
.findAll();
我在tweetsResults
中获取数据,然后我使用RealmResult
(不是Realm对象)来获取过滤数据。
final RealmResults<Tweet> retweets = tweetsResults
.where()
.greaterThan("retweet_count", 0)
.findAllSortedAsync("retweet_count", Sort.DESCENDING);
retweets.addChangeListener(new RealmChangeListener<RealmResults<Tweet>>() {
@Override
public void onChange(RealmResults<Tweet> element) {
Toaster.shortToast("Found " + retweets.size()); // => Not triggered
}
});
现在使用findAllSortedAsync
我没有得到任何结果(但结果存在)并且没有触发回调。
当我将第二个查询更改为findAllSorted
时,它会开始向我提供结果。
如果我的方法不对,请你指导我。
我使用 Realm v3.1.3 和Android Studio 2.3.2
答案 0 :(得分:2)
你没有给出足够的背景,以便我可以告诉你在做什么。但是,如果retweets
是方法中的局部变量,则@EpicPandaForce(当然)完全正确。
想一想。方法退出后,retweets
超出范围。这意味着它所引用的RealmResults
有资格进行垃圾收集。
一旦它消失了,你会期望通知者做什么?您将其注册为通知程序的对象早已不复存在!
事实上,因为retweets
符合GC的条件,因此更改侦听器也是如此。他们都走了,你没有得到任何通知