Кажется, что RalmObject задает свои поля значениям по умолчанию, когда переходит к конструктору другого объекта RealmObject (см. Комментарии в коде ниже). Простое обходное решение не передает объект конструктору и назначает поля после создания объекта. Но я действительно не понимаю, как это возможно. Поэтому мой вопрос: может кто-нибудь объяснить, что происходит, пожалуйста? И в каких ситуациях я должен быть осведомлен о подобном поведении во время работы с Realm?Android realm. Передача объекта RealmObject в качестве параметра для конструктора. Поля нулевых значений
Вот простой пример кода, который воспроизводит проблему:
realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Stock stock1 = new Stock();
stock1.id = "stock1";
managedStock = realm.copyToRealm(stock1);
}
});
//output here: managedStock.id = stock1
Log.d("myLogs", "managedStock.id = " + managedStock.id);
Goods goods = new Goods(managedStock);
И в конструктор объекта Товары передается managedStock имеет идентификатор == NULL, как это возможно?
public class Goods extends RealmObject {
@PrimaryKey
public String id;
public Stock stock;
public Goods() {}
public Goods(Stock s) {
//output here: s.id == null
Log.d("myLogs", "s.id == " + s.id);
}
}
и сток объект, на всякий случай
public class Stock extends RealmObject {
@PrimaryKey
public String id;
public String name;
}
Некоторые дополнительная информация: сфера 1.2.0, Android 5.0, устройство Samsung Galaxy S4
Заранее спасибо!
Вы можете попробовать заменить «Log.d (« myLogs »,« s.id == »+ s.id);' с 'String id = s.id; Log.d ("myLogs", "s.id ==" + id); '? Если это все еще «null», то это ошибка в Realm-Transformer. – EpicPandaForce
@EpicPandaForce Yeap, это все еще «null» –
Я не человек Realm, но это действительно звучит как проблема трансформатора Realm. Если вы сделаете выбор в своих полях, нажмите правую кнопку мыши, скажите «Инкапсулировать поля» и выберите все и, следовательно, создайте геттеры и сеттеры для своих полей повсюду, это все еще «null»? (Лично я все еще использую getter/setter в своих RealmObjects, потому что он кажется более стабильным, чем полевое преобразование.) – EpicPandaForce