在RealmObject外部创建托管的RealmList

时间:2016-05-11 12:16:52

标签: java realm realm-list

在我的应用中,我有一个接受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时(如果可能的话)。

我的问题:

  • 有没有办法让这个RealmList由Realm管理?
  • 如果可以的话,这个函数经常被调用是一个问题
  • 是否有其他(首选)方法可以实现此目的(ID列表&gt; RealmResults / RealmQuery)

1 个答案:

答案 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();