Android上的Couchbase lite,检索视图

时间:2017-07-07 19:03:01

标签: android listview couchbase-lite

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

我可以发出多个元素吗?

1 个答案:

答案 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被调用。这是数据从数据库中提取并用于填充列表条目的地方。