如何在AndroidJava中的自定义Couchbase Lite插件中使用查询限制

问题描述

我正在为Ionic Capacitor开发自定义插件Couchbase Lite。我正在使用Android版本,但无法获得查询限制。 limit参数是可选的,因此我检查它是否为null。如果不为null,则要将限制附加到现有查询变量。但是我收到“无法在“查询”中解析方法“限制”的错误”的错误我有什么办法可以不用编写两个查询构建器而一个有限制而另一个没有限制吗?

try {
            String dbname = call.getString("dbname");
            Integer limit = call.getInt("limit");

            Query query = QueryBuilder
                .select(
                    SelectResult.expression(Meta.id),SelectResult.property("title")
                )
                .from(DataSource.database(databases.get(dbname)))

            if (limit != null){
                query.limit(Expression.intValue(limit));
            }

            ResultSet resultSet = query.execute();

            JSONArray array = new JSONArray();
            for (Result result : resultSet) {
                array.put(new JSONObject(result.toMap()));
            }

            JSObject ret = new JSObject();
            ret.put("result",true);
            ret.put("rows",array);
            call.success(ret);
        } catch (final Exception e) {
            call.reject("Error documents ",e);
        }

解决方法

您可以在将限制转换为((From)查询).limit(Expression.intValue(limit))之前将查询强制转换为From对象。

,

@Pasin的答案简单而正确。但是,如果您希望避免强制转换,则可以执行以下操作:

    From query = QueryBuilder
        .select(
            SelectResult.expression(Meta.id),SelectResult.property("title")
        )
        .from(DataSource.database(databases.get(dbName)));

    if (limit != null){
        query.limit(Expression.intValue(limit));
    }

    ResultSet resultSet = query.execute();

`