как сохранить список объектов в Realm Android? - PullRequest
0 голосов
/ 24 октября 2019

Я хочу сохранить объект, у которого есть список, проблема в том, что когда я добавляю список, он показывает мне ошибку

это объект:

public class SaveRealm extends RealmObject {

    private String id;
    private RealmList<AnswersBean> answers;

    public SaveRealm(){}
    public SaveRealm(String id, RealmList<AnswersBean> answers) {
        this.id = id;
        this.answers = answers;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }


    public RealmList<AnswersBean> getAnswers() {
        return answers;
    }

    public void setAnswers(RealmList<AnswersBean> answers) {
        this.answers = answers;
    }
}

этоОтветыBean:

    public class AnswersBean extends RealmObject {
    private String text;
    private boolean belongsToCurrentUser;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public boolean isBelongsToCurrentUser() {
        return belongsToCurrentUser;
    }

    public void setBelongsToCurrentUser(boolean belongsToCurrentUser) {
        this.belongsToCurrentUser = belongsToCurrentUser;
    }
    public AnswersBean(){}
    public AnswersBean(String text, boolean belongsToCurrentUser) {
        this.text = text;
        this.belongsToCurrentUser = belongsToCurrentUser;
    }

}

и в операции, где я сохраняю область, я делаю следующее:

final AnswersBean receptor = new AnswersBean("test", false);
RealmList<AnswersBean> answersList = new RealmList<>();
answersList.add(receptor);
 SaveRealm saveRealm = myRealm.createObject(SaveRealm.class);
 saveRealm.setId("s");
 saveRealm.setAnswers(answersList);
 myRealm.commitTransaction();

, но я получаю следующую ошибку

java.lang.NullPointerException: попытка вызвать метод интерфейса long io.realm.internal.Row.getIndex () для нулевой ссылки на объект

Я получаю эту ошибку настрока saveRealm.setAnswers (answersList)

Как сохранить список?

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

попробуйте это

public T addObject(Class<T> m_type, T obj) {
    T result = null;
    try {
        Realm realm = Realm.getDefaultInstance();
        realm.beginTransaction();
        result = realm.copyToRealmOrUpdate(obj);
        realm.commitTransaction();
        realm.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

здесь T - универсальный объект, это будет класс вашего царства

0 голосов
/ 24 октября 2019

попробуйте

try(Realm realm = Realm.getDefaultInstance()) {
                        realm.executeTransaction(new Realm.Transaction() {
                            @Override
                            public void execute(Realm realm) {
                                 RealmList<News> _newsList = new RealmList<>();
                                _newsList.addAll(myCustomArrayList);
                                realm.insertOrUpdate(_newsList); // <-- insert unmanaged to Realm

                            }
                        });
                    }
0 голосов
/ 24 октября 2019

В вашем классе SaveRealm поле answers является списком. Когда вы создаете объект, используя myRealm.createObject (я могу предположить, что это опечатка ChatRealm.class), этот член создается. Вы не можете переназначить этого члена другому списку, скорее, вы изменили бы существующий список.

Например, ваш метод SaveRealm.setAnwers может выглядеть следующим образом: -

public void setAnswers(RealmList<AnswersBean> answers) {
    this.answers.clear();
    this.answers.addAll(answers);
}
...