#java #android #realm
#java #Android #область
Вопрос:
Я пытаюсь записать несколько объектов в свою базу данных realm.
Поскольку они связаны с другим объектом (RealmUser), я добавляю их в его RealmList<RealmActivity>
via getActivities().addAll(activities)
.
Я пробовал это с и без предварительного копирования коллекции в область через copyToRealm(activities)
и вот в чем проблема. Похоже, это работает до тех пор, пока я не перезапущу свое приложение (или, как ни странно, когда я вернусь к другому действию). Как только я это делаю, действия по-прежнему сохраняются в базе данных, но они больше не связаны с пользователем. Я попробовал realm.copyToRealmOrUpdate(user);
и realm.insertOrUpdate(user);
(как вы можете видеть в коде), и он не будет сохранять ассоциации дольше, чем для этого действия.
Я предполагаю, что ассоциации хранятся в памяти, но никогда не передаются в фактический файл (?), И как только я покидаю действие, образ памяти моей БД удаляется, что приводит к потере ассоциаций, тогда как мои фактические данные сохраняются в фактическом файле. Итак, что мне нужно сделать, чтобы сохранить ассоциации?
try(Realm realm = Realm.getDefaultInstance())
{
realm.executeTransaction(new Realm.Transaction()
{
@Override
public void execute(Realm realm)
{
RealmUser user = realm.where(RealmUser.class).equalTo("userId", userId).findFirst();
List<RealmActivity> tmp = realm.copyToRealm(activities);
user.getActivities().addAll(tmp);
user.getVitalData().addAll(realm.copyToRealm(vitalData));
user.getDailyActivities().addAll(realm.copyToRealm(dailies));
realm.copyToRealmOrUpdate(user);
realm.insertOrUpdate(user);
}
});
}
Комментарии:
1. Вам не нужно сохранять ассоциации. Показанный вами код должен сохранять ассоциации на диск. Является
userId
ли первичный ключ?copyToRealmOrUpdate()
иinsertOrUpdate
оба должны работать здесь. Вы когда-нибудь копировали пользователя в БД с пустымactivities
значением при запуске приложения? Это перезапишет пользовательский объект такими жеuserId
пустыми списками в пользовательском объекте.2. Спасибо тысячу раз и больше за этот комментарий. Я действительно сохранил пользователя с пустым списком действий, который вообще не предназначался! Еще раз спасибо!
Ответ №1:
Как уже указывал beeender, я сохранял экземпляр пользователя с пустым списком действий каждый раз, когда я входил в систему. В этом и заключалась проблема.