如何用参数查询RealmList<Integer>?Realm分类模型子分类查询
看起来你在Realm中查询子分类的时候踩了个小坑,我来帮你捋清楚正确的做法~
首先,你的需求是找出所有parentCategories列表中包含指定分类ID的Category对象(也就是该分类的子分类),但之前的查询写法有问题:你之前用contains("parentCategories", category.getParentCategories()),这里的第二个参数传错了——Realm的contains()方法针对RealmList<Integer>字段时,需要传入的是单个要匹配的ID值,而不是整个父ID列表;直接传数组的方式也不对,contains不支持数组参数。
正确的查询代码
// 获取目标父分类的ID Integer targetParentId = category.getId(); Realm realm = Realm.getDefaultInstance(); try { RealmResults<Category> childCategories = realm.where(Category.class) // 检查parentCategories列表中是否包含目标父ID .contains("parentCategories", targetParentId) .findAll(); return childCategories; } finally { // 务必关闭Realm实例,避免资源泄漏 realm.close(); }
关键说明
contains("parentCategories", targetParentId):这个方法会遍历每个Category的parentCategories列表,只要列表里包含targetParentId,就会被筛选出来,正好符合你找子分类的需求。- 用
try-finally包裹Realm操作:确保不管查询成功还是失败,Realm实例都会被正确关闭,这是Realm开发中的最佳实践。 - 如果在UI线程执行查询:建议改用
findAllAsync()避免阻塞UI,示例如下:
RealmResults<Category> childCategories = realm.where(Category.class) .contains("parentCategories", targetParentId) .findAllAsync(); // 可以添加监听器获取异步查询结果 childCategories.addChangeListener(results -> { // 处理查询到的子分类 });
这样调整后,应该就能正确查询到指定分类的所有子分类啦~
内容的提问来源于stack exchange,提问作者TomCB
相关产品推荐
相关产品推荐

