这个问题是关于Couchbase lite(没有同步网关)。
我是Couchbase的新手,我设法使用demo app,但我完全不明白。 它包含这段代码(根据我的理解,因为我不是以英语为母语的人)检索视图以使用索引填充列表视图:
// This code can be found in ListsActivity.java
// in the setupViewAndQuery() method
com.couchbase.lite.View listsView = mDatabase.getView("list/listsByName");
if (listsView.getMap() == null) {
listsView.setMap(new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
String type = (String) document.get("type");
if ("task-list".equals(type)) {
emitter.emit(document.get("name"), null);
}
}
}, "1.0");
}
listsLiveQuery = listsView.createQuery().toLiveQuery();
有人能帮我解决每个部分的工作吗?
填充列表视图的步骤
我可以在代码(第3行)中更改“list / listsByName”吗?会发生什么?
我可以发出多个元素吗?
答案 0 :(得分:0)
代码有点复杂。让我们先回答简单的部分。
我可以在代码(第3行)中更改“list / listsByName”吗?
是。这只是Couchbase View的名称。您选择视图名称。不幸的是,Couchbase和Android中使用的术语重叠了一些。 Couchbase View是数据库的一种静态索引。
我可以发出多个元素吗?
是。你可以发出你想要的任何东西。请查看文档here
现在,跟踪Android ListView的更新方式:
在onCreate方法的ListsActivity.java
通知中,ListAdapter
实例会添加到ListView
。此ListAdapter
是一个扩展LiveQueryAdapter
的私有内部类。
LiveQueryAdapter
位于utils
子包中。如果查看它的构造函数,你会看到它为传入的查询添加了一个更改侦听器。触发时,此更改侦听器将枚举器设置为等于实时查询传回的行,然后调用notifyDataSetChanged
告诉列表刷新自己。反过来,这会导致getView
中的ListAdapter
被调用。这是数据从数据库中提取并用于填充列表条目的地方。