1

私のアプリには、ID の を受け取り、これらの ID に属するマシンArrayListの を返すメソッドがあります。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)
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 に答える