web-dev-qa-db-ja.com

Androidレルム-findAllは、nullパラメーターを持つオブジェクトを返します

Realmで簡単なクエリを実行し、MyModelオブジェクトのリストを取得して、後でアプリの別の場所で使用する必要があります。 Realmにクエリを実行すると、各オブジェクトにnull値が含まれることがありますが、toStringは期待値を返します。

モデル:

@RealmClass
public class MyModel extends RealmObject implements Serializable {

public static final String KEY_MODEL = "key_myModel";

@PrimaryKey
private int id;
private String myStr;
private int myInt;

//.... getters and setters

@Override
public String toString() {
    return "id = " + id
            + "\nmyStr = " + myStr
            + "\nmyInt = " + myInt;
}

}

値を保存するにはどうすればよいですか。

public static void storeModel(MyModel model) {
        Realm realm = Realm.getDefaultInstance();
        realm.beginTransaction();
        realm.copyToRealm(model);
        realm.commitTransaction();
    }

オブジェクトを取得するにはどうすればよいですか?

public static RealmList<MyModel> getNewElementsFromIndex(int indexFrom) {
        Realm realm = Realm.getDefaultInstance();
        RealmResults<MyModel> allValues = realm.where(MyModel).greaterThan("id", indexFrom).findAll();

        RealmList<MyModel> finalList = new RealmList<MyModel>();
        finalList.addAll(allValues.subList(0, allValues.size()));
        return finalList;
    }

getNewElementsFromIndex(value)を呼び出すと、アイテムのリストが表示されますが、このリスト内のすべてのアイテムには、パラメーターmyStr = nullおよびmyInt =があります。 =。

私は何が間違っているのですか?

11
Bugdr0id

管理対象レルムオブジェクトの場合、データはフィールドにコピーされません。プロキシゲッター/セッター呼び出しを介して取得します。

したがって、フィールドがnullであり、toString()が値を示しているという事実は、完全に予想され、十分に文書化された動作です。

値を確認するには、getterメソッドのウォッチを追加する必要があります。

ドキュメント を参照してください。

11
EpicPandaForce