在我的应用程序中,我有一个方法,该方法接受ID的ArrayList
并返回属于这些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时。
我的问题:
有什么方法可以让RealmList由Realm管理吗?
如果可能的话,是否经常调用此函数是否存在问题?
是否有其他(首选)方法可以实现此目的(ID列表> RealmResults / RealmQuery)
最佳答案
有什么方法可以让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();
托管意味着它已经被持久化了。
如果可能的话,是否经常调用此函数是否存在问题?
取决于,如果您不需要再次将其保留,请参阅答案3。
是否有其他(首选)方法可以实现此目的(ID列表> 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();
关于java - 在RealmObject外部创建托管RealmList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37162444/