osa*_*gan 6 java database android realm
我在Realm数据库中持有一组不同类型的对象.现在我想查询某些类型的对象,包括该对象的所有字段.我在下面编写的方法是获取Object的所有声明字段并迭代字段以检查是否包含给定的查询字符串.
它适用于String字段类型,但抛出java.lang.IllegalArgumentException: Field 'documentCompletionStatus': type mismatch. Was STRING, expected INTEGER.整数值,因为我的搜索查询对象是字符串.我暂时跳过非字符串值作为解决方法,但我很好奇是否可以在所有字段中搜索它.
例如,如果用户想要搜索以对象的"年龄"字段为目标的整数值,我就不能以这种方式工作.
public <T extends RealmObject> List<T> searchDatabase(Class<T> clazz, String searchQuery) {
/* Begin Query */
RealmQuery<T> query = realmDatabase.where(clazz).beginGroup();
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
/* Skip NON-String Values */
if (!fields[i].getType().equals(String.class)) {
continue;
}
if (i == 0) {
query.contains(fields[i].getName(), searchQuery, false);
} else {
query.or().contains(fields[i].getName(), searchQuery, false);
}
}
/* Return All Objects Found */
return query.endGroup().findAll();
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ior 10
来自境界的基督徒在这里.您的代码不起作用的原因是因为contains()只能处理String字段(http://realm.io/docs/java/api/io/realm/RealmQuery.html#contains-java.lang.String-java.lang. String-),因此当您尝试将contains()其与整数字段一起使用时,它将失败.
如果要搜索不同的数据类型,则需要将它们转换为类似数据类型,例如:
public <T extends RealmObject> List<T> searchDatabase(Class<T> clazz, String searchQuery) {
RealmQuery<T> query = realmDatabase.where(clazz).beginGroup();
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Class<?> type = fields[i].getType();
String fieldName = fields[i].getName();
if (i > 0) {
query.or()
}
if (type.equals(String.class)) {
query.contains(fieldName, searchQuery)
} else if (type.equals(Integer.class)) {
query.equalTo(fieldName, Integer.parseInt(searchQuery))
} else {
...
}
}
/* Return All Objects Found */
return query.endGroup().findAll();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6712 次 |
| 最近记录: |