我有一个包含具有一个布尔属性的对象的Realm数据库。在整个应用程序中,我需要过滤掉数据库的所有内容,这完全正常。
在另一个活动中,我只需要通过数据库中的对象进行过滤,这些对象的布尔值设置为true。但它不起作用,它仍然可以过滤所有对象。
你能检查我的代码并试着告诉我,我做错了吗?
favourites = realm.where(MyObject.class).equalTo("isFavourite", true).findAll();
editTextSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (favourites.isEmpty()) {
return;
}
adapter = new ImageAdapter(FavouritesActivity.this, helper.searchInFavourites(s));
gridView.setAdapter(adapter);
}
}
OrderedRealmCollection<MyObject> searchInFavourites(CharSequence search) {
OrderedRealmCollection<MyObject> favourites;
if (search != null && search.length() > 0) {
favourites = realm.where(MyObject.class).equalTo("isFavourite", true)
.contains("name", search.toString(), Case.INSENSITIVE)
.or()
.contains("category", search.toString(), Case.INSENSITIVE)
.or()
.contains("description", search.toString(), Case.INSENSITIVE).findAll();
} else {
favourites = realm.where(Illusion.class).equalTo("isFavourite", true).findAll();
}
return favourites;
}
答案 0 :(得分:6)
favourites = realm.where(MyObject.class)
.beginGroup() // <--
.equalTo("isFavourite", true)
.endGroup() // <--
.beginGroup() // <--
.contains("name", search.toString(), Case.INSENSITIVE)
.or()
.contains("category", search.toString(), Case.INSENSITIVE)
.or()
.contains("description", search.toString(), Case.INSENSITIVE)
.endGroup() // <--
.findAll();