2017-07-07 81 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