2016-12-28 1 views
1

두 객체 : MailBoxEmail이 있습니다. 각 수신기에는 많은 Emails이 있습니다. MailBoxRealmModel에 이메일을 추가 할 때안드로이드 영역 관계형 객체의 기본 키 처리하기

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**를 사용할 수 있습니까?

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

realm.insertOrUpdate(email); 

mailBoxRealmModel.getEmails().add(email); 

나는이 줄에 널 포인터 예외 email을 얻고있다 :

mailBoxRealmModel.getEmails().add(email);

예외 :

에 의해 발생 : java.lang.NullPointerException이 : 가상 메서드를 호출하는 시도 'null io.realm.RealmList.add (io.realm.RealmModel)'null 객체 참조에 com.koa.mailbox.MailBoxAct에서 io $ 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 android.app에서 android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1135) 에서 android.app.Activity.performCreate (Activity.java:6876) 에서 .mailbox.MailBoxActivity.onCreate (MailBoxActivity.java:71) .ActivityThread.performLaunchActivity (ActivityThread.java:3207) android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3350)의 android.app.ActivityThread.access의 $ 1100 (ActivityThread.java:3350))에서 android.os.Looper.loop (활동 T. 새로운 RealmObject을 만들 수 java.lang.reflect.Method.invoke에서 android.app.ActivityThread.main (ActivityThread.java:7229) 에서 Looper.java:158) (기본 방법)

+0

전체 예외 메시지를 표시 할 수 있습니까? – beeender

+0

내 예를 추가했습니다. – android

+0

문제는'mailBoxRealmModel'이 관리되지 않는 RealmObject입니다. 'mailBoxRealmModel'을 어떻게 얻었습니까? – beeender

답변

1

적절한 방법 기존 기본 키는 사용 방법 realm.createObject(EmailRealmModel.class, emailID)입니다.

전체 코드는 : 당신이 inmemory 인스턴스 중 하나를 사용하여 영역 객체에 저장 업데이 트를 원하는 경우

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

또는, 당신은 realm.copyToRealmOrUpdate(obj)를 호출해야합니다. documentation에서

예 : 관리되지 않는 RealmObject에

// For create managed proxy, you should wrap EmailRealmModel object by call copyToRealmXXX 
EmailRealmModel email = realm.copyToRealmOrUpdate(new EmailRealmModel(id)); 
mailBoxRealmModel.getEmails().add(email); 
+0

나는 그것을 알고 있지만 동일한 ID를 가질 수있는 여러 개의 전자 메일이 있으므로 레코드를 업데이트해야하므로 ** 영역을 사용하고 싶습니다.insertOrUpdate ** – android

+0

ID로 EmailRealmModel 객체를 업데이트 하시겠습니까? – Sergey

+0

괜찮아요.하지만 ** ** MyObject obj = new MyObject(); ** ** obj **이 줄에 null 포인터를 제공합니다. mailBoxRealmModel.getEmails(). add (email); – android

0

RealmList 필드는 수동으로 초기화해야합니다.

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

mailBoxRealmModel.setEmails(new RealmList<MailBoxRealmModel>()); 
mailBoxRealmModel.getEmails().add(email); 
realm.insertOrUpdate(mailBoxRealmModel); 
관련 문제