2015-03-15 9 views
1

Проблема: во время нажатия я получаю ошибку «плохого запроса» и некоторую ошибку аутентификации, даже если она получает положительный ответ.Как синхронизировать Couchbase-Lite Android с CouchDB?

У меня почти нет опыта работы с CouchDB или Couchbase, но из того, что я понимаю, вы обычно синхронизируете Couchbase-Lite с Couchbase Sync Gateway, но поскольку последний использует протокол репликации CouchDB, вы все равно можете использовать CouchDB, если вы Не используйте «Каналы». Описана репликация с помощью CouchDB here. Я бы предпочел не использовать 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﹕ [email protected] 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﹕ [email protected]: error getting remote checkpoint 
03-15 23:15:15.309 27429-27546/ E/Sync﹕ [email protected]: 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» отображается как ошибка.

И это couch.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 

ответ

2

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

Правильная линия couchDbUrl поэтому

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

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

+0

Привет @Netcob, вы пробовали последние версии couchbase-lite и couchDB вместе? Я не мог найти документацию, подтверждающую, что вы можете использовать их вместе. если бы вы могли работать с ними вместе .. вы нашли какие-то ограничения? TNX! – delkant

Смежные вопросы