创建组织:
Organization organization = realm.createObject(Organization.class); // Create a new object
OrganizationId organizationId = realm.createObject(OrganizationId.class);
organizationId.setAggregateId("1");
organization.setOrganizationId(organizationId);
organization.setOrganizationName("1-? ??????? ??????????? ??????????? ????????");
organization.setAddress("?????: ?. ???????, ??. ??????, 2");
organization.setPhoneNumber("???.: (+99871) 214-51-01, 214-50-86, 214-50-43");
organization.setKey(organization.getOrganizationName().toLowerCase());
Run Code Online (Sandbox Code Playgroud)
当我在这个组织中添加新医生时,一切都会好起来的.应用程序工作没有任何错误:
Doctor doctor = realm.createObject(Doctor.class);
//FULL NAME
FullName fullName = realm.createObject(FullName.class);
fullName.setFirstName("Joe");
fullName.setLastName("Richard");
fullName.setMiddleName("Brown");
doctor.setFullName(fullName);
//CONTACTS
Contacts contacts = realm.createObject(Contacts.class);
RealmList<PhoneNumber> phoneNumberRealmList = new RealmList<>();
PhoneNumber pn = realm.createObject(PhoneNumber.class);
pn.setPhoneNumber("+998903735173");
phoneNumberRealmList.add(0, pn);
contacts.setPhoneNumbers(phoneNumberRealmList);
doctor.setContacts(contacts);
//ORGANIZATION
doctor.setOrganization(organization);
//SPECIALIZATION
RealmList<Specialization> specializationRealmList = new RealmList<>();
Specialization specialization = realm.createObject(Specialization.class);
specialization.setSpecializationName("??????????");
specializationRealmList.add(0, specialization);
doctor.setSpecializationList(specializationRealmList);
Run Code Online (Sandbox Code Playgroud)
当我添加第二个医生时,我收到错误(错误堆栈在下面):
Doctor doctor2 = realm.createObject(Doctor.class);//
//FULL NAME
FullName fullName2 = realm.createObject(FullName.class);
fullName2.setFirstName("Bob");
fullName2.setLastName("Richardson");
fullName2.setMiddleName("Brownowich");
doctor2.setFullName(fullName2);
//CONTACTS
Contacts contacts2 = realm.createObject(Contacts.class);
RealmList<PhoneNumber> phoneNumberRealmList2 = new RealmList<>();
PhoneNumber pn2 = realm.createObject(PhoneNumber.class);
pn2.setPhoneNumber("+998903720757");
phoneNumberRealmList2.add(1, pn2);
contacts2.setPhoneNumbers(phoneNumberRealmList2);
doctor2.setContacts(contacts2);
//ORGANIZATION
doctor2.setOrganization(organization);
//SPECIALIZATION
RealmList<Specialization> specializationRealmList2 = new RealmList<>();
Specialization specialization2 = realm.createObject(Specialization.class);
specialization2.setSpecializationName("??????");
specializationRealmList2.add(1, specialization2);
doctor2.setSpecializationList(specializationRealmList2);
Run Code Online (Sandbox Code Playgroud)
错误实际上是这样的:
进程:uz.sunet.wm,PID:5505 java.lang.RuntimeException:无法启动活动ComponentInfo {uz.sunet.wm/uz.sunet.wm.activities.MainActivity}:io.realm.exceptions.RealmException:主键约束破碎.值已经存在:android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)android.app.ActivityThread.access $ 800(ActivityThread.java:151) )在android.app.A活动上运行android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1321)android.O.Roper.loop(Looper.java:193)上的android.os.Handler.dispatchMessage(Handler.java:110) .app.ActivityThread.main(ActivityThread.java:5292)位于java.lang.reflect.Method.invokeNative(Native Method),位于com.android.internal的java.lang.reflect.Method.invoke(Method.java:515)位于dalvik.system.NativeStart.main(本地方法)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)中的.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:824)引起:io .realm.exceptions.RealmException:主键约束已断开.值已经存在:io.realm.internal.Table.throwDuplicatePrimaryKeyException(Table.java:731)中的io.realm.internal.Table.addEmptyRow(Table.java:380)位于io.realm.Realm.createObject(Realm. java:1037)at uz.sunet.wm.data.MyRealm.initiateRealmData(MyRealm.java:88)at uz.sunet.wm.activities.MainActivity.onCreate(MainActivity.java:60)at android.app.Activity.performCreate (Activity.java:5264)在Android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)的android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 2390)在Android.app.Handler.dispatchMessage(Handler.java:110)的android.app.ActivityThread.access $ 800(ActivityThread.java:151)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1321)在Android.app.Looper.loop(Looper.java:193)android.app.ActivityThread.main(ActivityThread.java:5292)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 824)在dalvik.system.NativeStart.main(本地方法)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
我不知道发生了什么.对于第一个医生我设置id - 0.第二 - 1.但是我得到了这个错误.我做错了什么?如何解决这个问题呢?
Chr*_*ior 10
这是因为您Realm.createObject()与具有主ID的模型类一起使用.当您使用createObject()新对象时,使用默认值创建,包括.0表示主键.如果您已经有一个主键为0的对象,则会抛出主键冲突错误,就像您的情况一样.
您有两种选择:
1)永远不要使用0作为对象的主键值,因为这将阻止进一步调用Realm.createObject().这也意味着您不能连续两次调用此方法.
2)使用独立对象,然后使用Realm.copyToRealm()或Realm.copyToRealmOrUpdate().这将使Realm在Realm中创建任何对象之前检查主值.
我建议使用后一种方法,因为它不易出错.
| 归档时间: |
|
| 查看次数: |
4814 次 |
| 最近记录: |