1

在我的应用程序中,我有一个接受ArrayListID 并返回RealmList属于这些 ID 的机器的方法。

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)
4

1 回答 1

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

Managed 意味着它已经被持久化了 Realm。

如果这是可能的,那么经常调用此函数是否有问题

取决于,如果您不需要再次持久化它们,请参阅答案 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();
于 2016-05-12T02:27:09.413 回答