Couchbase Lite DocumentUpdater не обновляет БД

Вот мой код для обновления документа:

        doc.update(new Document.DocumentUpdater() {
        @Override
        public boolean update(UnsavedRevision newRevision) {
            Map < String, Object > properties = newRevision.getUserProperties()
           properties.put("timeCreated", "348390284");
           properties.put("name", "231321");
           return true;
        }
    });

Когда я запускаю запрос и перебираю строки результатов, используя следующий код:

    Database db = getDB(ID);
    Query query  = db.createAllDocumentsQuery();
    query.setDescending(true);

    try {
        QueryEnumerator result = query.run();
        for (Iterator<QueryRow> it = result; it.hasNext(); ) {
            QueryRow row = it.next();
            row.getDocument().getProperties();
        }
    } catch (CouchbaseLiteException e) {}

row не содержит обновлений, которые я установил в программе обновления. Я получаю что-то вроде этого:

row -> size 2
"conflict" -> "size=0"
"rev" -> "1-ac2065458743..."

Я застрял на этом этапе и не знаю, как это исправить.


person user7688889    schedule 10.03.2017    source источник
comment
Какую версию Couchbase вы используете? Вы получаете два документа по вашему запросу. У них есть оригинальное содержимое, с которым вы их создали?   -  person Hod    schedule 10.03.2017
comment
Это строка в моем файле Gradle compile 'com.couchbase.lite:couchbase-lite-android:+' Первоначально документ был пуст (я создал новые документы). Я пытался получить элементы, которые я поместил в свойства, но когда я выполняю запрос всего документа, каждая строка не имеет моего содержимого   -  person user7688889    schedule 10.03.2017
comment
Просто немного контекста о том, где я называю это средство обновления. На моем веб-сервере Android я хочу сохранить полезную нагрузку, когда она поступает на сервер. Я создаю новый поток для обработки каждого запроса и в этом потоке использую средство обновления.   -  person user7688889    schedule 10.03.2017


Ответы (1)


UnsavedRevision.getUserProperties() возвращает новый экземпляр Map. Поэтому вам нужно установить его обратно, вызвав метод setUserProperties() для ревизии, прежде чем возвращать true.

Следующие коды взяты из примера кода Couchbase Lite. ССЫЛКА

Document doc = database.getDocument(myDocId);
doc.update(new Document.DocumentUpdater() {
    @Override
    public boolean update(UnsavedRevision newRevision) {
        Map<String, Object> properties = newRevision.getUserProperties();
        properties.put("title", title);
        properties.put("notes", notes);
        newRevision.setUserProperties(properties); <<----
        return true;
    }
});

Я надеюсь, это поможет вам.

Спасибо!

person hideki    schedule 11.03.2017