1

我有两个对象:MailBoxEmail. 每个 Receiver 都有很多Emails.

public class MailBoxRealmModel extends RealmObject {

    @PrimaryKey
    private long id;

    private String name;
    private String mailboxId;
    private RealmList<EmailRealmModel> emails;
}

public class EmailRealmModel extends RealmObject {

    @PrimaryKey
    private long EmailId;

    private String Name;
    private String Text;
    private String Tag;
    private int Type;
    private String Time;
    private int Status;
}

**realm.insertOrUpdate**将电子邮件添加到 MailBoxRealmModel 时如何使用?

EmailRealmModel email = new EmailRealmModel();
email.setMessageId(emailID);

realm.insertOrUpdate(email );

mailBoxRealmModel.getEmails().add(email);

email在这一行得到一个空指针异常:

mailBoxRealmModel.getEmails().add(email);

例外:

引起:java.lang.NullPointerException:尝试在 com.koa.mailbox.MailBoxActivity$1.execute(MailBoxActivity. java:123) at io.realm.Realm.executeTransaction(Realm.java:1253) at com.koa.mailbox.MailBoxActivity.test(MailBoxActivity.java:88) at com.koa.mailbox.MailBoxActivity.onCreate(MailBoxActivity.java :71) 在 android.app.Activity.performCreate(Activity.java:6876) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 在 android。 app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 在 android.app.ActivityThread.access$1100(ActivityThread.java:222) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在android.app.ActivityThread.main(ActivityThread.java:7229) 在 java.lang.reflect.Method.invoke(Native Method)1795) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7229) 在 java。 lang.reflect.Method.invoke(本机方法)1795) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7229) 在 java。 lang.reflect.Method.invoke(本机方法)158) 在 android.app.ActivityThread.main(ActivityThread.java:7229) 在 java.lang.reflect.Method.invoke(Native Method)158) 在 android.app.ActivityThread.main(ActivityThread.java:7229) 在 java.lang.reflect.Method.invoke(Native Method)

4

2 回答 2

1

使用现有主键创建新 RealmObject 的正确方法是使用 realm.createObject(EmailRealmModel.class, emailID)方法。

完整代码片段:

realm.beginTransaction();
EmailRealmModel email = realm.createObject(EmailRealmModel.class, emailID);
mailBoxRealmModel.getEmails().add(email);
realm.commitTransaction();

或者,如果您希望使用内存实例之一更新存储在领域对象中,您应该调用realm.copyToRealmOrUpdate(obj).

文档中的示例:

// For create managed proxy, you should wrap EmailRealmModel object by call copyToRealmXXX
EmailRealmModel email = realm.copyToRealmOrUpdate(new EmailRealmModel(id));
mailBoxRealmModel.getEmails().add(email);
于 2016-12-28T17:46:46.927 回答
0

在非托管 RealmObject 上,RealmList必须手动初始化字段。

EmailRealmModel email = new EmailRealmModel();
email.setMessageId(emailID);

mailBoxRealmModel.setEmails(new RealmList<MailBoxRealmModel>());
mailBoxRealmModel.getEmails().add(email);
realm.insertOrUpdate(mailBoxRealmModel);
于 2016-12-29T15:41:25.873 回答