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.
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
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