【问题标题】:Realm: Syntax error in query with beginGroup() and endGroup()领域:使用 beginGroup() 和 endGroup() 进行查询时出现语法错误
【发布时间】:2016-08-27 00:50:30
【问题描述】:

在执行此类查询时,由于java.lang.UnsupportedOperationException: Syntax error 而导致崩溃:

public RealmResults<MyObject> getMyObjects(List<Integer> ids, boolean filter) {
    Realm realm = null;
    try {
        realm = Realm.getDefaultInstance();
        RealmQuery<MyObject> query = realm.where(MyObject.class);
        query = query.beginGroup();
        for (int i=0; i< ids.size(); i++) {
            query = query.equalTo("id", ids.get(i));
            if (i != ids.size() -1) {
                query = query.or();
            }
        }
        query = query.endGroup();
        if (filter) {
            query = query.equalTo("someBoolean", true);
        }
        return query.findAll();
    } finally {
        if (realm != null) realm.close();
    }
}

删除 query = query.beginGroup();query = query.endGroup(); 会使语法错误消失,但我不确定查询是否会产生相同的结果。

谁能帮我指出语法错误在哪里以及为什么会发生?

【问题讨论】:

  • 日志中没有关于错误的进一步信息,我得到的只是java.lang.UnsupportedOperationException: Syntax error
  • ids.size() 返回什么?
  • 输入数组的大小,不能为空。这样就不会导致崩溃。除了链中的最后一个元素之外,我使用 if 来附加我需要的任意数量的 OR,否则我将在查询末尾得到一个单独的 OR。
  • 哇不知道 in() 查询方法。它确实有效!但是我仍然无法解释为什么会出现语法错误。

标签: java android realm


【解决方案1】:

您应该使用 1.2.0 中添加的 in() 运算符。

以前我会告诉你使用this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多