Как синхронизировать Couchbase-Lite Android с CouchDB?

Проблема: во время отправки я получаю сообщение об ошибке «Bad Request» и какую-то ошибку аутентификации, даже если он получает положительный ответ.

У меня почти нет опыта работы с CouchDB или Couchbase, но, насколько я понимаю, вы обычно синхронизируете Couchbase-Lite с Couchbase Sync Gateway, но, поскольку последний использует протокол репликации CouchDB, вы все равно можете использовать CouchDB, если вы не используете " Каналы". Репликация с помощью CouchDB упоминается здесь< /а>. Я бы предпочел не использовать Couchbase Sync и Couchbase Server, так как пока это небольшой экспериментальный проект, мне не нужны каналы, а на моем сервере недостаточно ресурсов.

Я использую CBL-Android 0.0.0-501 (по-моему, самый последний сейчас, уже пробовал 1.0.3) и CouchDB 1.5.0.

Это вызывается в методе onCreate моей основной активности на Android:

void minimalPushTest() throws IOException, CouchbaseLiteException {
    String databaseName = "cblpushtest";
    String couchDbUrl = "http://192.168.4.11:5984";
    String userName = "testuser";
    String userPw = "testpw";

    // initialize database
    Manager manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS);
    Database database = manager.getDatabase(databaseName);
    Document document = database.createDocument();
    Map<String, Object> data = new HashMap<String, Object>();
    data.put("somekey", "sometext");
    document.putProperties(data);

    // start push replication
    Replication replication = database.createPushReplication(new URL(couchDbUrl));
    replication.setContinuous(false);
    replication.setAuthenticator(new BasicAuthenticator(userName, userPw));
    replication.start();
}

Вот что CouchDB говорит о «/_session» для пользователя «testuser»:

{"ok":true,"name":"testuser","roles":["testing"]}

...и для "/cblpushtest/_security":

{"admins":{"names":[],"roles":[]},"members":{"names":["testuser"],"roles":["testing"]}}

Вот вывод logcat в Android Studio:

03-15 23:15:14.999  27429-27429/ W/Sync﹕ [fireTrigger()] => START
03-15 23:15:15.109  27429-27429/ W/Sync﹕ [fireTrigger()] => GO_ONLINE
03-15 23:15:15.199  27429-27546/ E/Sync﹕ com.couchbase.lite.replicator.ReplicationInternal$4@429cbb20 checkSessionAtPath() response: {ok=true, userCtx={name=testuser, roles=[testing]}, info={authentication_db=_users, authentication_handlers=[oauth, cookie, default], authenticated=default}}
03-15 23:15:15.309  27429-27546/ W/Sync﹕ com.couchbase.lite.replicator.ReplicationInternal$9@4291cab0: error getting remote checkpoint
03-15 23:15:15.309  27429-27546/ E/Sync﹕ com.couchbase.lite.replicator.PusherInternal@429c1758: Progress: set error = org.apache.http.client.HttpResponseException: Bad Request
03-15 23:15:15.309  27429-27546/ W/Sync﹕ [fireTrigger()] => STOP_GRACEFUL
03-15 23:15:15.314  27429-27562/ W/Sync﹕ [fireTrigger()] => WAITING_FOR_CHANGES
03-15 23:15:15.314  27429-27562/ W/Sync﹕ [fireTrigger()] => STOP_IMMEDIATE

Почему-то ответ "ok=true" отображается как ошибка.

А это диван.log (часы не синхронизированы, но это соответствующие выходные данные):

[Sun, 15 Mar 2015 22:14:32 GMT] [info] [<0.29026.2>] 192.168.4.61 - - GET /_session 200
[Sun, 15 Mar 2015 22:14:32 GMT] [info] [<0.29024.2>] 192.168.4.61 - - GET /_local/3e7d908842481392245906438560f235e9d3138f 400

person Netcob    schedule 15.03.2015    source источник


Ответы (1)


Разобрался: URL-адрес базы данных должен указывать на фактическую базу данных, а не только на корень CouchDB. Я думал, что тестировал это раньше, но я думаю, что в то время у меня все еще были проблемы с аутентификацией, поэтому я слишком рано отклонил это решение.

Таким образом, правильная строка для дивана DbUrl

String couchDbUrl = "http://192.168.4.11:5984/"+databaseName;

.. и, возможно, даже не обязательно иметь такое же имя, но я не проверял. Во всяком случае, данные сейчас передаются.

person Netcob    schedule 17.03.2015
comment
Привет, @Netcob, пробовали ли вы последние выпуски cockbase-lite и cockDB вместе? Я не смог найти никакой документации, подтверждающей, что вы можете использовать их вместе. если бы вы могли работать с ними вместе... вы нашли какие-то ограничения? Спасибо! - person delkant; 05.07.2016