在我的应用程序中,我有一个方法,该方法接受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/

10-10 08:39