2016-08-16 6 views
1

Ich habe Probleme die Replikationsfunktion immer für meine lokale Couchbase-Datenbank und meine Android App arbeiten:Android Couchbase Lite Replication

private void startSync() { 
    URL syncUrl; 
    try { 
     syncUrl = new URL("http://10.0.2.2:4984/sync_gateway"); // I am testing with the Android emulator 

     manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS); 
     database = manager.getDatabase("db"); 

     Replication pullReplication = database 
       .createPullReplication(syncUrl); 
     pullReplication.setContinuous(true); 
     pullReplication.addChangeListener(this); 
     pullReplication.start(); 

    } 
    catch (MalformedURLException e) { 
     throw new RuntimeException(e); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    catch (CouchbaseLiteException e) { 
     e.printStackTrace(); 
    } 

    Query query = database.createAllDocumentsQuery(); 
    query.setAllDocsMode(Query.AllDocsMode.ALL_DOCS); 
    QueryEnumerator result; 
    try { 
     result = query.run(); 

     for (Iterator<QueryRow> it = result; it.hasNext();) { 
      QueryRow row = it.next(); 
      Log.i("CouchActivity", "Getting document i: " + row.getDocumentId()); 
     } 
    } 
    catch (CouchbaseLiteException e) { 
     e.printStackTrace(); 
    } 
} 

Sobald ich eine Pull-Replikation erstellt haben, ich gehen alle Dokumente abfragen für die lokale Datenbank, aber keine Dokumente werden zurückgegeben.

Meine Konfigurationsdatei für den Sync-Gateway ist wie folgt:

{ 
    "interface": ":4984", 
    "adminInterface": ":4985", 
    "log": ["REST"], 
    "databases": { 
    "sync_gateway": { 
    "server": "http://localhost:8091", 
    "bucket": "stations", 
    "sync": `function(doc) {channel(doc.channels);}`, 
    "users": { "GUEST": { "disabled": false, "admin_channels": ["*"] } } 
    } 
    } 
} 

Wenn ich in localhost eingeben: 4984/sync_gateway, ich habe eine Antwort von "

{"committed_update_seq":1,"compact_running":false,"db_name":"sync_gateway","disk_format_version":0,"instance_start_time":1471324911376777,"purge_seq":0,"state":"Online","update_seq":1}" 

Nicht sicher, wenn die Problem ist mit der Android Seite, wie ich sehe das Sync-Gateway Ausgabe "POST/sync_gateway/_changes", wenn ich meinen Android-Code ausführen. Kann jemand erklären, warum die Replikation nicht funktioniert?

Update - Ich konnte bestätigen, dass meine Einrichtung korrekt durchgeführt wurde. Das Problem, das ich hatte, hatte damit zu tun, wie ich meine Dokumente erstellte. Die, die ich über die Admin-Konsole erstellt habe, verfügten nicht über die erforderlichen Metadaten, um als gültiges Dokument erkannt zu werden. Am Ende bevölkerte ich die serverseitige Datenbank, indem ich die Datenbank über meine Push-Replikation über meine App befüllte. Das Erstellen eines Dokuments über die POST-Anforderung sollte ebenfalls funktionieren.

+1

Was erwarten Sie im Ergebnis der Abfrage aller Dokumente auf Couchbase Lite? Die Antwort vom Synchronisierungsgateway gibt an, dass keine Replikationsänderungen vorgenommen werden (update_seq = 1). Sie können ein neues Dokument in Sync Gateway über die REST-API hinzufügen (siehe die Spezifikation für ein Beispiel für eine Currell-Anforderung http://developer.couchbase.com/mobile/swagger/sync-gateway-public/#!/document/post_db) und Überprüfen Sie dann, ob es von der Abfrage aller Dokumente auf Couchbase Lite zurückgegeben wird. – jamiltz

+0

Die Dokumente wurden alle über die Admin-Konsole hinzugefügt. Sollte der anfängliche Pull nicht immer noch die drei Dokumente synchronisieren, die sich in der Datenbank befinden. Ich werde diese Bitte versuchen. – user1927638

Antwort

1

Wenn Sie Dokumente über die Admin-Konsole hinzufügen, fehlt das Sync-Gateway dazwischen. Die Verfolgung von Änderungen für ein bestimmtes Dokument (seine Sequenznummer) wird am Sync-Gateway verwaltet. Wenn also ein Agent versucht, ein Dokument zu ziehen, findet er keine Änderungen in Bezug auf seine lokale Datenbank und daher erhalten Sie nichts. Um ein Dokument tatsächlich zu ziehen, müssen Sie es zuerst von Ihrem Agenten über das Sync Gateway drücken. Die Admin-Konsole fügt den SQL-Tabellen auf dem Server direkt Dokumente hinzu, die keine Beziehung zum Sync-Gateway haben.

Verwandte Themen