我在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
上的字段监视点。这是此断点配置的屏幕截图:我重复了该操作(使用另一台设备更新文档),但是除了显示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.ChangeListener
与Document
实例关联。我相信以下事情可能会发生。
获取文档ID为8980450c-5ddb-4181-a7bf-3e162c67a68f
的Document实例(Document@6.888)。
在文档实例中添加了Document.ChangeListener。
文档实例被释放(垃圾回收)。
获取具有相同文档ID的文档实例(Document@9.975)。
但是此实例没有Document.ChangeListener,并且无法通知更改。