gpt4 book ai didi

java - Realm 的 RealmChangeListener 作为匿名类不会每次都被调用

转载 作者:行者123 更新时间:2023-12-02 03:26:25 26 4
gpt4 key购买 nike

我正在尝试解决有关 Realm 的 RealmChangeListener 添加为匿名类的问题。问题是,有时它会被调用,但有时不会。但是,如果类实现 RealmChangeListener 并将查询添加为 this,则一切正常。

在下面的示例中,当我打开应用程序时,会向本地存储库发出 4 个请求,以同时从数据库加载数据。因此 getUsers 方法被调用 4 次,每次都有不同的 User.Type 值。但是,大多数情况下 (80%) RealmChangeListener 仅被调用一次。

这不起作用

public class Repo {

Reaml mRealm;

public Repo(@Inject Realm realm){
this.mReal = realm;
}

public void getUsers(User.Type type, Callbacks callbacks){
mRealm.where(User.class)
.equalTo("type", type.name())
.findAllSortedAsync("firstName", Sort.ASCENDING)
.addChangeListener(new new RealmChangeListener<RealmResults<User>>() {
@Override
public void onChange(RealmResults<User> element) {
if (element.isLoaded()) {
Log.d("%s users are loaded", type.name());
callbacks.onUsersLoaded(element);
element.removeChangeListener(this);
}
}
}));
}
}
}

但是,如果 Repo 类实现 RealmChangeListener 并且我将其作为 this 引用传递给 RealmResults,它会被正确调用 4 次。

这有效!

public class Repo implements RealmChangeListener<RealmResults<User>>{

Reaml mRealm;

public Repo(@Inject Realm realm){
this.mReal = realm;
}

public void getUsers(User.Type type, Callbacks callbacks){
mRealm.where(User.class)
.equalTo("type", type.name())
.findAllSortedAsync("firstName", Sort.ASCENDING)
.addChangeListener(this);
}

@Override
public void onChange(RealmResults<User> element) {
if (element.isLoaded()) {
Log.d("Users are loaded from THIS");
callbacks.onUsersLoaded(element);
element.removeChangeListener(this);
}
}
}

您对可能出现问题的地方有什么建议吗?我该如何解决这个问题?我想使用匿名类而不是对 this 的引用。我试图在 SO、Realm 文档、GitHub 上搜索解决方案,但没有成功。

提前致谢

最佳答案

嗯,

答案非常简单,正如@beeender指出的那样,结果获得了GCed。我没有意识到即使我有一个局部变量 final RealmResults<User> result我将 . findAllSortedAsync 的结果分配给它,它在方法体执行后几乎立即被GCed。

所以,解决方案是更改 RealmResults<User> result从局部变量到实例变量。

关于java - Realm 的 RealmChangeListener 作为匿名类不会每次都被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38815297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com