如何在Realm Android中保存对象列表?

时间:2019-10-24 01:08:00

标签: java android realm

我想保存一个具有列表的对象,问题是当我添加列表时,它向我显示错误

这是对象:

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;
    }
}

这是AnswersBean:

    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 :(得分:1)

尝试

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

                            }
                        });
                    }

答案 1 :(得分:0)

在您的SaveRealm类中,answers字段是一个列表。当您使用myRealm.createObject创建对象(我只能假设是ChatRealm.class的错字)时,会创建该成员。您不能将该成员重新分配到另一个列表,而应该修改现有列表。

例如,您的SaveRealm.setAnwers方法可能看起来像这样:-

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

答案 2 :(得分:0)

尝试

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是通用对象,它将是您的领域类