在我的应用中,我有一个接受ArrayList
ID的方法,并返回属于这些ID的RealmList
台机器。
public RealmList<Machine> getMachinesById(ArrayList<Long> machineIds) {
RealmList<Machine> machines = new RealmList<Machine>();
for (int i = 0; i < machineIds.size(); i++){
Machine m = getMachineById(machineIds.get(i));
if (m != null) {
machines.add(m);
}
}
return machines;
}
getMachineById()
函数只为特定ID找到正确的计算机。
我想更多地过滤此输出,但是,当我尝试通过执行RealmQuery
获取.where()
时,我得到一个异常,告诉我应该将此RealmList
放入'管理模式'。
Caused by: io.realm.exceptions.RealmException: This method is only available in managed mode
at io.realm.RealmList.where(RealmList.java:425)
我知道我收到此错误,因为此列表是独立的,不受Realm管理。
可能很重要的是要添加这个函数会被调用很多,因为每当我的应用程序中的某个列表刷新时它就会被触发。这意味着每当我创建一个新的托管RealmList时(如果可能的话)。
我的问题:
答案 0 :(得分:1)
有没有办法让这个RealmList由Realm管理?
是。有。但是RealmList
的重点应该是RealmObjects
的字段。例如:
public class Factory {
RealmList<Machine> machineList;
// setter & getters
}
Factory factory = new Factory();
RealmList<Machine> machineList = new RealmList<>();
// Add something to the list
factory.setMachines(machineList);
realm.beginTransaction();
Factory managedFactory = realm.copyToRealmOrUpdate(factory);
realm.commitTransaction();
管理意味着它必须坚持Realm。
如果可以的话,这个函数经常被调用是一个问题
取决于,如果您不需要再次坚持,请参阅答案3.
是否有其他(首选)方法可以实现此目的(ID列表&gt; RealmResults / RealmQuery)
在您的情况下,也许您可以使用ReaulResults
代替?例如:
RealmQuery<Machine> query = realm.where(Machine.class);
for (int i = 0; i < machineIds.size(); i++){
if (i != 0) query = query.or();
query = query.equalTo("id", machineIds.get(i));
}
RealmResults<Machine> machines = query.findAll();