Android 上的 Couchbase lite,检索浏览量

Couchbase lite on Android, retrieve views

这个问题是关于 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" 吗?会发生什么?

我可以发射不止一种元素吗?

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

Can I change "list/listsByName" in the code (line 3)?

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

Can I emit more than one element?

是的。你几乎可以发出任何你想要的东西。查看文档 here

现在,跟踪 Android ListView 是如何更新的:

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

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