小编And*_*Bas的帖子

Android L上的Couchbase Lite

更新到Android L之后,我遇到了这样的错误,不过之前(在Android 4.4 Nexus 7 2013上)一切都很好:

java.lang.NoSuchFieldError: no "I" field "mConnectionPtr" in class "Landroid/database/sqlite/SQLiteConnection;" or its superclasses
        at com.couchbase.touchdb.TDCollateJSON.nativeRegisterCustomCollators(Native Method)
        at com.couchbase.touchdb.TDCollateJSON.registerCustomCollators(TDCollateJSON.java:11)
        at com.couchbase.lite.android.AndroidSQLiteStorageEngine.open(AndroidSQLiteStorageEngine.java:46)
        at com.couchbase.lite.Database.open(Database.java:909)
        at com.couchbase.lite.Manager.getDatabase(Manager.java:228)
        at com.explain.messenger.model.utils.CBHelper.init(CBHelper.java:55)
Run Code Online (Sandbox Code Playgroud)

尝试创建数据库后发生执行:

 manager = new Manager(new AndroidContext(appContext),
                Manager.DEFAULT_OPTIONS);
 Database db = manager.getDatabase("db_name"); // exception here
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决它?

android couchbase couchbase-lite android-5.0-lollipop

8
推荐指数
1
解决办法
1119
查看次数

CouchBase Lite,在查询中排除具有某些键的文档

我有一个带有映射器的简单视图,它会发出带有一些键的文档。

    com.couchbase.lite.View view = database.getView(VIEW_NAME);
    if (view.getMap() == null) {
        Mapper map = new Mapper() {
            @Override
            public void map(Map<String, Object> document, Emitter emitter) {
                if ("user".equals(document.get("type"))) {
                    emitter.emit(document.get("name"), document); 
                }
            }
        };
        view.setMap(map, null);
    }
Run Code Online (Sandbox Code Playgroud)

有了这个视图,我就可以在上面创建查询,并使用某些参数,如 setKeys、startKey、endKey、setDescending、setDescending、setSkip 等,如 couchbase手册中所述。

如果我写

    Query query = view.createQuery();
    List<Object> keys = new ArrayList<>();
    keys.add("User Name");
    query.setKeys(keys);
Run Code Online (Sandbox Code Playgroud)

该查询将返回与“用户名”键匹配的所有文档。

但我找不到一种简单的方法来编写排除(省略)具有某些键的文档的查询(与 setKeys() 函数相反)

在ToDoLite 示例中发现了一个 hack 代码如下所示:

public static Query getQuery(Database database, final String ignoreUserId) {
    com.couchbase.lite.View view = database.getView(VIEW_NAME);
    if (view.getMap() == …
Run Code Online (Sandbox Code Playgroud)

android couchbase couchbase-view couchbase-lite

5
推荐指数
1
解决办法
3068
查看次数