我在Android上使用Couchbase Lite。我有一个文档,我需要在该文档上添加Document.ChangeListener(只要此文档发生更改即可更新UI)。

我添加了它,但是它似乎被“自动地”删除了,我找不到原因。我有一个称为“ attachDocumentChangeListener”的方法:

public void attachDocumentChangeListener(String documentId, final DocumentChangeListener<TData> listener) {
       getDefaultDatabase().getDocument(documentId).addChangeListener(listener);
}


我不再触摸设备,而是通过另一台设备对文档进行更新。这应该触发ChangeEvent,但似乎不会发生。

我注意到当文档更新时,该文档没有ChangeListener(即使我之前添加了Juste)。为了检查何时删除了ChangeListener,我在removeChangeListener(ChangeListener changeListener)类的函数Document中添加了一个断点,但从未调用过该断点,并且在修订版本更新时,字段changeListeners仍然为空。

我添加了另一个断点,即changeListeners上的字段监视点。这是此断点配置的屏幕截图:

android - Couchbase Lite中删除了Document.ChangeListener-LMLPHP

我重复了该操作(使用另一台设备更新文档),但是除了显示ChangeListener的日志已被删除外,我什么都没有看到(不知道如何操作)

{com.couchbase.lite.Document@6.888}.changeListeners will be accessed at com.couchbase.lite.Document.addChangeListener(Document.java:169)
size : 0, ID : 8980450c-5ddb-4181-a7bf-3e162c67a68f
{com.couchbase.lite.Document@6.888}.changeListeners will be accessed at com.couchbase.lite.Document.addChangeListener(Document.java:169)
size : 1, ID : 8980450c-5ddb-4181-a7bf-3e162c67a68f
{com.couchbase.lite.Document@9.975}.changeListeners will be accessed at com.couchbase.lite.Document.addChangeListener(Document.java:169)
size : 0, ID : 8980450c-5ddb-4181-a7bf-3e162c67a68f
{com.couchbase.lite.Document@10.189}.changeListeners will be accessed at com.couchbase.lite.Document.revisionAdded(Document.java:598)
size : 0, ID : 8980450c-5ddb-4181-a7bf-3e162c67a68f
{com.couchbase.lite.Document@10.189}.changeListeners will be accessed at com.couchbase.lite.Document.revisionAdded(Document.java:598)
size : 0, ID : 8980450c-5ddb-4181-a7bf-3e162c67a68f


我们可以看到removeChangeListener从未被调用过,但是changeListeners size已被设置为0。

有人可以帮忙吗?

最佳答案

Document.ChangeListenerDocument实例关联。我相信以下事情可能会发生。


获取文档ID为8980450c-5ddb-4181-a7bf-3e162c67a68f的Document实例(Document@6.888)。
在文档实例中添加了Document.ChangeListener。
文档实例被释放(垃圾回收)。
获取具有相同文档ID的文档实例(Document@9.975)。
但是此实例没有Document.ChangeListener,并且无法通知更改。

07-27 19:21