2017-07-07 5 views
0

Diese Frage bezieht sich auf Couchbase Lite (kein Sync-Gateway).Couchbase Lite auf Android, Aufrufe abrufen

Ich bin neu bei Couchbase, ich habe es geschafft, die demo app zu verwenden, aber ich verstehe es nicht vollständig. Es enthält den Code, die (soweit ich das verstehe, da ich nicht englischer Muttersprachler bin) abrufen Ansichten, die eine Listenansicht mit dem Indizes zu füllen:

// 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(); 

Könnte mir jemand eine Hand geben mit dem, was jedem Teil macht?

In dem Schritt wird die Listenansicht bevölkert

Kann ich "Liste/listsByName" im Code (Linie 3) ändern? Was würde passieren?

Kann ich mehr als ein Element ausgeben?

+0

Haben Sie sich das Couchbase-Training hier angesehen: https://developer.couchbase.com/documentation/mobile/current/training/index.html? Wenn Sie Fragen haben, können Sie gerne in den Foren von Couchbase posten. – Hod

+0

@Hod Das ist genau der Punkt, an dem ich diesen Code bekommen habe und worum es bei meiner Frage geht. – Fahed

Antwort

0

Der Code ist ein wenig verschachtelt. Lassen Sie uns zuerst die einfachen Teile beantworten.

Kann ich "list/listsByName" im Code ändern (Zeile 3)?

Ja. Das ist nur der Name der Couchbase View. Sie wählen den Namen der Ansicht aus. Leider überschneiden sich die in Couchbase und Android verwendeten Begriffe. Eine Couchbase-Ansicht ist eine Art statischer Index Ihrer Datenbank.

Kann ich mehr als ein Element ausgeben?

Ja. Sie können fast alles ausgeben, was Sie wollen. Werfen Sie einen Blick in der Dokumentation here

Jetzt verfolgt, wie der Android Listview aktualisiert wird:

In ListsActivity.java Bekanntmachung im onCreate Methode eine ListAdapter Instanz der ListView hinzugefügt wird. Diese ListAdapter ist eine private innere Klasse, die LiveQueryAdapter erweitert.

LiveQueryAdapter ist im utils Unterpaket. Wenn Sie sich seinen Konstruktor ansehen, sehen Sie, dass ein Änderungs-Listener zu der übergebenen Abfrage hinzugefügt wird. Wenn dieser Listener ausgelöst wird, setzt er einen Enumerator gleich den von der Live-Abfrage zurückgegebenen Zeilen und ruft dann notifyDataSetChanged an sich selbst auffrischen. Dies wiederum bewirkt, dass in ListAdapter aufgerufen wird. Dort werden die Daten aus der Datenbank abgerufen und zum Auffüllen eines Listeneintrags verwendet.

+0

In 'ListsActivity.java' gibt es eine Definition von' ListAdapter'. Muss ich es in meinen Code aufnehmen, damit es funktioniert oder von CB? – Fahed

+0

Sie müssen es in Ihren Code aufnehmen. 'ListAdapter' ist eine innere Klasse in' ListsActivity', so dass Sie sich den Code dafür ansehen können. – Hod

Verwandte Themen