Android Realm处理关系对象中的主键 [英] Android Realm Handling Primary Key in Relational Object

查看:270
本文介绍了Android Realm处理关系对象中的主键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个对象:MailBoxEmail.每个接收方都有许多Emails.

I have two objects: MailBox and Email. Each Receiver has many 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;
}

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

How can one use **realm.insertOrUpdate**when adding email to MailBoxRealmModel?

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

realm.insertOrUpdate(email );

mailBoxRealmModel.getEmails().add(email);

我在此行上得到一个空指针异常email:

I am getting a null pointer exception email on this line:

mailBoxRealmModel.getEmails().add(email);

例外:

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法"boolean io.realm.RealmList.add(io.realm.RealmModel)" 在com.koa.mailbox.MailBoxActivity $ 1.execute(MailBoxActivity.java:123) 在io.realm.Realm.executeTransaction(Realm.java:1253) 在com.koa.mailbox.MailBoxActivity.test(MailBoxActivity.java:88) 在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(本机方法)

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean io.realm.RealmList.add(io.realm.RealmModel)' on a null object reference at 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) at android.app.Activity.performCreate(Activity.java:6876) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)  at android.app.ActivityThread.access$1100(ActivityThread.java:222)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7229)  at java.lang.reflect.Method.invoke(Native Method)

推荐答案

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

Proper way to create a new RealmObject with existing primary key is usage realm.createObject(EmailRealmModel.class, emailID)method.

完整代码片段:

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

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

Or, if you wish update stored in realm object using one of inmemory instances, you should call 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);

这篇关于Android Realm处理关系对象中的主键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆