Android上的Couchbase lite,检索视图

Android上的Couchbase lite,检索视图,android,listview,couchbase-lite,Android,Listview,Couchbase Lite,这个问题是关于Couchbase lite(无同步网关)的 我是Couchbase的新手,我设法使用了,但我不完全理解。 它包含以下代码(据我所知,因为我不是英语母语人士),用于检索视图以使用索引填充listview: // This code can be found in ListsActivity.java // in the setupViewAndQuery() method com.couchbase.lite.View listsView = mDataba

这个问题是关于Couchbase lite(无同步网关)的

我是Couchbase的新手,我设法使用了,但我不完全理解。 它包含以下代码(据我所知,因为我不是英语母语人士),用于检索视图以使用索引填充listview:

    // 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();
//可以在ListsActivity.java中找到此代码
//在setupViewAndQuery()方法中
com.couchbase.lite.View listsView=mDatabase.getView(“list/listsByName”);
if(listsView.getMap()==null){
setMap(新映射器(){
@凌驾
公共空心地图(地图文档、发射器){
字符串类型=(字符串)document.get(“类型”);
如果(“任务列表”。等于(类型)){
emit(document.get(“name”),null);
}
}
}, "1.0");
}
listsLiveQuery=listsView.createQuery().toLiveQuery();
有人能帮我看看每个部分都在做什么吗?

在哪个步骤中填充listview

我可以更改代码(第3行)中的“list/listsByName”吗?会发生什么情况?


我可以发射多个元素吗?

代码有点复杂。让我们先回答简单的部分

我可以更改代码(第3行)中的“list/listsByName”吗

对。这只是Couchbase视图的名称。您可以选择视图名称。不幸的是,Couchbase和Android中使用的术语有些重叠。Couchbase视图是数据库的一种静态索引

我可以发射多个元素吗

对。你可以发射你想要的任何东西。请看一下文档

现在,跟踪Android ListView的更新方式:


ListsActivity.java
中,注意onCreate方法中的
ListAdapter
实例被添加到
ListView
。这个
ListAdapter
是一个私有的内部类,它扩展了
LiveQueryAdapter


LiveQueryAdapter
位于
utils
子包中。如果查看其构造函数,您将看到它向传入的查询添加了一个更改侦听器。触发时,此更改侦听器将枚举数设置为live查询传回的行数,然后调用
notifyDataSetChanged
通知列表刷新自身。这反过来会导致调用
ListAdapter
中的
getView
。这就是从数据库中提取数据并用于填充列表条目的地方。

您是否看过这里的Couchbase培训:?如果您有问题,请随时发布到Couchbase论坛。@Hod这正是我从中获得这段代码的地方,也是我的问题所在。在
ListsActivity.java
中有
ListAdapter
的定义。我必须在我的代码中包含它才能工作还是由CB完成?你必须在代码中包含它
ListAdapter
ListsActivity
中的一个内部类,因此您可以查看它的代码。