2017-07-07 67 views
0

这个问题是关于Couchbase lite(没有同步网关)。Android上的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行)改变 “列表/ listsByName”?会发生什么?

我可以放出多个元素吗?

+0

您是否看过Couchbase培训:https://developer.couchbase.com/documentation/mobile/current/training/index.html?如果您有任何问题,请随时发布到Couchbase论坛。 – Hod

+0

@Hod这正是我从那里得到这段代码的地方,以及我的问题。 – Fahed

回答

0

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

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

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

我可以放出多个元素吗?

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

现在,跟踪了Android的ListView如何得到更新:

ListsActivity.java通知在onCreate方法一ListAdapter实例被添加到ListView。这ListAdapter是一个私人的内部类延伸LiveQueryAdapter

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

+0

在'ListsActivity.java'中有一个ListAdapter的定义。我是否必须将其包含在我的代码中才能正常工作或由CB完成? – Fahed

+0

您必须将其包含在您的代码中。 'ListAdapter'是'ListsActivity'中的一个内部类,所以你可以看看它的代码。 – Hod