Невозможно изменить управляемые объекты вне транзакции записи Realm Android - PullRequest
0 голосов
/ 10 мая 2018

У меня проблемы с обновлением объекта области. У меня есть 4 фрагмента. Я перенесу значение из одного фрагмента в другой. Всего 16 полей. 1-й фрагмент содержит 4 и так далее. Сначала я сохраняю объект из 4 первых четырех полей следующим способом: -

public static <T extends RealmObject> void InsertRecordinRealm(final Class<T> clazz, final T passedObject, final Integer integerd) {
    Realm realm = getRealmInstance();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            realm.copyToRealmOrUpdate(passedObject);
        }
    });
    realm.close();
}

Теперь я получаю значения из первого фрагмента во второй фрагмент, используя этот метод: -

public static <T extends RealmObject> T GetRecordById(Class<T> clazz, Integer id) {
    RealmQuery<T> queryForUsern = getRealmInstance().where(clazz).equalTo("RealmId", 1);
    T recordByid = queryForUsern.findFirst();
    return recordByid;
}

Здесь я правильно получаю объект. Но когда я обновляю объект значениями Второго фрагмента, я получаю эту ошибку «Невозможно изменить управляемые объекты вне транзакции записи»

Во втором фрагменте я обновляю объект: -

public static <T extends RealmObject> void UpdateRecordinRealmByID(final T passedObject, final Class<T> clazz, final Integer Id) {
        Realm realm = getRealmInstance();
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {

                RealmQuery<T> queryForUsern = 
                getRealmInstance().where(clazz).equalTo("RealmId", 1);
                T recordByid = queryForUsern.findFirst();
                recordByid = passedObject;
                realm.insertOrUpdate(recordByid);
            }
        });
        realm.close();
    }

Помощь будет оценена! Заранее спасибо

1 Ответ

0 голосов
/ 10 мая 2018

вместо

RealmQuery<T> queryForUsern = 
            getRealmInstance().where(clazz).equalTo("RealmId", 1);

сделать это:

RealmQuery<T> queryForUsern = realm.where(clazz).equalTo("RealmId", 1);

Пояснение: executeTransaction() уже предоставлен экземпляр области с открытой транзакцией. Вы должны использовать этот экземпляр области. В вашем коде вы извлекли «новый» экземпляр области без открытой транзакции, поэтому произошла ошибка.

...