【问题标题】:Android Realm ChangeListener not being triggered未触发 Android Realm ChangeListener
【发布时间】:2017-04-02 23:09:45
【问题描述】:

我有一个未触发的 Realm 结果更改侦听器,代码如下:

final RealmResults<LogEntry> entries = realm.where(LogEntry.class).findAll();

entries.addChangeListener(new RealmChangeListener<RealmResults<LogEntry>>() {
            @Override
            public void onChange(RealmResults<LogEntry> results) {
                Log.v("Testing", "The size is: " + results.size());
            }
        });

肯定有新的东西被添加了,我有一个关于领域插入的日志,打印出表的新大小,但由于某种原因,更改侦听器什么也没做?我在这里遗漏了什么吗,它似乎与文档相同。

【问题讨论】:

  • 我们如何在onChange方法中使用realm Transaction?
  • 这篇文章比他们的官方文档medium.com/@Zhuinden/… 更好地解释了关于领域的一切及其

标签: android realm


【解决方案1】:

您需要保留对 entries 的类引用以防止它被 GC:

public MyClass {

  private RealmResults<LogEntry> entries;

  public void myMethod() {

    entries = realm.where(LogEntry.class).findAll();
    entries.addChangeListener(new RealmChangeListener<RealmResults<LogEntry>>() {
            @Override
            public void onChange(RealmResults<LogEntry> results) {
                Log.v("Testing", "The size is: " + results.size());
            }
        });
    }
}

【讨论】:

  • 很奇怪,但在我删除监听器entries.removeAllChangeListeners()后它工作了
  • 你能看看这个问题吗? stackoverflow.com/questions/63960419/…
  • 从 UI 线程调用 findAll() 函数是否安全?我的收藏量很大。
【解决方案2】:

如果您想使用realmChangeListener,则将您的RealmResult&lt;E&gt; 变量设为全局变量。只有这样它才会在数据库更改时触发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多