gpt4 book ai didi

java - 'RealmNoticeModelClass' 有一个主键,使用 'createObject(Class, Object)' 代替

转载 作者:搜寻专家 更新时间:2023-10-30 21:37:50 25 4
gpt4 key购买 nike

将 Realm 从 1.1.0 升级到 2.0.2 之后。处理对象时出现此错误。在早期版本中,它工作正常。

io.realm.exceptions.RealmException: 'RealmNoticeModelClass' 有主键,请改用 'createObject(Class, Object)'。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rana.sahaj.myyu, PID: 20202
io.realm.exceptions.RealmException: 'RealmNoticeModelClass' has a primary key, use 'createObject(Class<E>, Object)' instead.
at io.realm.Realm.createObjectInternal(Realm.java:821)
at io.realm.Realm.createObject(Realm.java:802)
at com.rana.sahaj.myyu.notice.NoticeOnItemSelectedActivity$1$2.onSuccess(NoticeOnItemSelectedActivity.java:162)
at com.rana.sahaj.myyu.notice.NoticeOnItemSelectedActivity$1$2.onSuccess(NoticeOnItemSelectedActivity.java:156)
at com.google.android.gms.tasks.zze$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5052)
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:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)

代码是

 realm.beginTransaction();
RealmNoticeModelClass realmNoticeModelClass = realm.createObject(RealmNoticeModelClass.class);
realmNoticeModelClass.setDocUrl(DocUrl1);
realmNoticeModelClass.setHashname(heading);
realmNoticeModelClass.setContent(contentString);
realmNoticeModelClass.setTime(getIntent().getExtras().getString("notice_time"));
realmNoticeModelClass.setPicurl(picUrlName);
realmNoticeModelClass.setUserPic(getIntent().getExtras().getString("image_user_notice"));
realmNoticeModelClass.setPdfUrl(PdfUrl);
realmNoticeModelClass.setPicOffline(SnapshotKey);
realmNoticeModelClass.setMetaType(null);
realmNoticeModelClass.setTimeStamp(SnapshotKey);
realm.commitTransaction();

n RealmNoticeModelClass

public class RealmNoticeModelClass extends RealmObject {
@PrimaryKey
private String timeStamp;
private String Content;
@Index
private String UserPic;
private String Hashname;
private String picurl;
private String time;
private String picOffline;
private String pdfUrl;
private String docUrl1;
private String metaType;

public String getMetaType() {
return metaType;
}

public void setMetaType(String metaType) {
this.metaType = metaType;
}

public String getDocUrl() {
return docUrl1;
}
... other getters setters
}

最佳答案

自 Realm 2.0.0 以来,主键是不可变的,这意味着您无法在创建对象后修改它们。

考虑到您有一个主键,创建对象时应设置其主键值。

在你的例子中,这个主键是

@PrimaryKey
private String timeStamp;

这意味着,这行代码将失败:

RealmNoticeModelClass realmNoticeModelClass = 
realm.createObject(RealmNoticeModelClass.class);
realmNoticeModelClass.setTimeStamp(snapshotKey /* primaryKeyValue*/);

应该是

RealmNoticeModelClass realmNoticeModelClass = 
realm.createObject(RealmNoticeModelClass.class, snapshotKey /* primaryKeyValue */);

关于java - 'RealmNoticeModelClass' 有一个主键,使用 'createObject(Class<E>, Object)' 代替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com