2016-08-19 26 views
1

我有一个realmdatabase,我想要做一个query如下。领域异常:java.lang.UnsupportedOperationException:缺少参数为非

  • 我有一个主键对象列表是Id字段。
  • 现在我有一个ID列表,我想要得到列表中没有 的id的对象列表。

实施例:

  • 在数据库我有一个列表:1,2,3,.... 9。
  • 我有一个列表ID是:1,2,3。
  • 我想得到4,5,6 ... 9。

所以我做一个查询,如下:

protected <T extends RealmObject> List<T> getListNotContainIds(Class<T> model, List<Long> idList, String fieldName) { 
    checkValueOfPortalRealm(); 
    RealmQuery<T> query = portalRealmInstance.where(model); 
    if (idList != null) { 
     query.not().beginGroup(); 
     for (int i = 0; i < idList.size(); i++) { 
      if (i == 0) { 
       query.equalTo(fieldName, idList.get(i)); 
      } else { 
       query.or().equalTo(fieldName, idList.get(i)); 
      } 
     } 
     query.endGroup(); 
    } 
    return query.findAll(); 
} 

然后,我得到了异常:。

java.lang.UnsupportedOperationException:在io.realm.internal.TableQuery.findAll(TableQuery.java缺少在io.realm.internal.TableQuery.validateQuery(TableQuery.java:94)参数不 : 449) 在io.realm.RealmQuery.findAll(RealmQuery.java:1434)

我客人,我有一些问题,我query,有些人可以帮助纠正它吗?

+0

你必须把''没有在**完**查询语句中,而不是在它的开始()。 – EpicPandaForce

+0

顺便说一句,你应该参考这个答案它可以帮助你:https://github.com/realm/realm-java/issues/3154 – EpicPandaForce

回答

0

你应该这样做:

protected <T extends RealmObject> List<T> getListNotContainIds(Class<T> model, List<Long> idList, String fieldName) { 
    checkValueOfPortalRealm(); 
    RealmQuery<T> query = portalRealmInstance.where(model); 
    if(idList != null && idList.size() > 0) { 
     boolean isFirst = true; 
     query = query.beginGroup(); 
     for (long id : idList) { 
      if(!isFirst) { 
       query = query.or(); 
      } 
      query = query.notEqualTo(fieldName, id); 
      isFirst = false; 
     } 
     query = query.endGroup(); 
    } 
    return query.findAll(); 
}