【发布时间】: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() 查询方法。它确实有效!但是我仍然无法解释为什么会出现语法错误。