Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主键约束已断开。值已存在:0_Android_Realm - Fatal编程技术网

Android 主键约束已断开。值已存在:0

Android 主键约束已断开。值已存在:0,android,realm,Android,Realm,创建的组织: Organization organization = realm.createObject(Organization.class); // Create a new object OrganizationId organizationId = realm.createObject(OrganizationId.class); organizationId.setAggregateId("1"); organization.setOrganizati

创建的组织:

    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());
当我为这个组织添加新医生时,一切都正常。应用程序正在运行,没有任何错误:

    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);
Doctor-Doctor=realm.createObject(Doctor.class);
//全名
FullName FullName=realm.createObject(FullName.class);
全名。setFirstName(“乔”);
全名。setLastName(“Richard”);
全名。setMiddleName(“布朗”);
医生:setFullName(全名);
//接触
Contacts=realm.createObject(Contacts.class);
RealmList phonenumberrelalmlist=新的RealmList();
PhoneNumber pn=realm.createObject(PhoneNumber.class);
pn.设置电话号码(“+998903735173”);
添加(0,pn);
联系人。设置电话号码(电话号码列表);
医生。设置联系人(联系人);
//组织机构
组织(组织)博士;
//专业化
RealmList specializationRealmList=新的RealmList();
专门化=realm.createObject(专门化.class);
专业化。设置专业化名称(“ПааааааГ”);
专门化realmlist.add(0,专门化);
医生设置专业列表(specializationRealmList);
当我添加第二个医生时,我得到了错误(错误堆栈如下所示):

Doctor doctor2=realm.createObject(Doctor.class)//
//全名
FullName fullName2=realm.createObject(FullName.class);
全名2.setFirstName(“Bob”);
全名2.setLastName(“理查森”);
全名2.setMiddleName(“布朗诺维奇”);
doctor2.setFullName(fullName2);
//接触
Contacts contacts2=realm.createObject(Contacts.class);
RealmList phonenumberrelalmlist2=新的RealmList();
PhoneNumber pn2=realm.createObject(PhoneNumber.class);
pn2.设置电话号码(“+998903720757”);
电话号码relalmlist2.add(1,pn2);
contacts2.设置电话号码(phoneNumberRealmList2);
医生2.设置触点(触点2);
//组织机构
博士2.组织(机构);
//专业化
RealmList specializationRealmList2=新的RealmList();
Specialization specialization2=realm.createObject(Specialization.class);
专业化2.设置专业化名称(“Уцццц”);
specializationRealmList2.add(1,specialization2);
博士2.setSpecializationList(specializationRealmList2);
错误实际上是这样的:

流程:uz.sunet.wm,PID:5505 java.lang.RuntimeException:无法启动活动组件信息{uz.sunet.wm/uz.sunet.wm.activities.MainActivity}: io.realm.exceptions.RealmException:主键约束已断开。 值已存在:0 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)上 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 在android.app.ActivityThread.access$800(ActivityThread.java:151) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 位于android.os.Handler.dispatchMessage(Handler.java:110) 位于android.os.Looper.loop(Looper.java:193) 位于android.app.ActivityThread.main(ActivityThread.java:5292) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:824) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 在dalvik.system.NativeStart.main(本机方法) 原因:io.realm.Exception.realmeException:主键约束已断开。值已存在:0 在io.realm.internal.Table.throwDuplicatePrimaryKeyException(Table.java:731)中 位于io.realm.internal.Table.addEmptyRow(Table.java:380) 位于io.realm.realm.createObject(realm.java:1037) 位于uz.sunet.wm.data.MyRealm.initiateRealmData(MyRealm.java:88) 位于uz.sunet.wm.activities.MainActivity.onCreate(MainActivity.java:60) 位于android.app.Activity.performCreate(Activity.java:5264) 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)上 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 在android.app.ActivityThread.access$800(ActivityThread.java:151) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 位于android.os.Handler.dispatchMessage(Handler.java:110) 位于android.os.Looper.loop(Looper.java:193) 位于android.app.ActivityThread.main(ActivityThread.java:5292) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:824) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 在dalvik.system.NativeStart.main(本机方法)


我不知道发生了什么事。对于第一个医生,我将id设置为-0。第二名-1。然而,我得到了这个错误。我做错了什么?如何解决此问题?

这是因为您正在将
Realm.createObject()
与具有主ID的模型类一起使用。当您使用
createObject()
时,将使用默认值创建一个新对象,包括主键的0。如果已经有主键为0的对象,将抛出主键冲突错误,就像您的情况一样

您有两个选择:

1) 切勿将0用作对象的主键值,因为这将阻止进一步调用
Realm.createObject()
。这也意味着您不能连续两次调用此方法

2) 使用独立对象和
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);