Android ';价值';不是有效的托管对象。在域中存储列表时
按钮点击更新列表Android ';价值';不是有效的托管对象。在域中存储列表时,android,arraylist,realm,local-storage,Android,Arraylist,Realm,Local Storage,按钮点击更新列表 public class MessageDetails extends RealmObject { private Boolean isIncoming; private String lastPosLeft; private String message; // getter setter here`} **更新列表** int pos = myData.size(); mDetails = new MessageDetails();
public class MessageDetails extends RealmObject {
private Boolean isIncoming;
private String lastPosLeft;
private String message;
// getter setter here`}
**更新列表**
int pos = myData.size();
mDetails = new MessageDetails();
mDetails.setMessage(etMessage.getText().toString());
mDetails.setIncoming(msgInOrOutBoolean);
mDetails.setLastPos(msgTypeOutgoingOrIncoming);
myData.add(pos,mDetails);
updateMsgInRealm();
日志
private void updateMsgInRealm() {
Realm realm = RealmManager.getRealm();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
final User user = realm.where(User.class).equalTo("id", mPref.getCurrentSelectedUserId()).findFirst();
assert user != null;
user.setMessageDetails(myData);
}
});
}
此处mPref.getCurrentSelectedUserId()
存储在sharedPrefance
存储RealmList
时出错
如果有人能帮我在域数据库中存储列表,我尝试了一些代码,但如果任何满足我要求的示例代码建议我在这里使用,我将无法使用。嘿,我在浪费了一整天的时间后得到了解决方案,我在这里列出了问题。 这里我做错了
e java.lang.IllegalArgumentException: 'value' is not a valid managed object.
at io.realm.ProxyState.checkValidObject(ProxyState.java:213)
at io.realm.com_example_dummychatapp_realm_UserRealmProxy.realmSet$messageDetails(com_example_dummychatapp_realm_UserRealmProxy.java:248)
at com.example.dummychatapp.realm.User.setMessageDetails(User.java:54)
at com.example.dummychatapp.MainActivity$2.execute(MainActivity.java:156)
at io.realm.Realm.executeTransaction(Realm.java:1493)
at com.example.dummychatapp.MainActivity.updateMsgInRealm(MainActivity.java:149)
at com.example.dummychatapp.MainActivity.onClick(MainActivity.java:217)
at android.view.View.performClick(View.java:6710)
at android.view.View.performClickInternal(View.java:6668)
at android.view.View.access$3400(View.java:797)
at android.view.View$PerformClick.run(View.java:26450)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
**用这个**
enter int pos = myData.size();
mDetails = new MessageDetails();
mDetails.setMessage(etMessage.getText().toString());
mDetails.setIncoming(msgInOrOutBoolean);
mDetails.setLastPos(msgTypeOutgoingOrIncoming);
myData.add(pos,mDetails);
**你只需要把上面的代码放进去**
MessageDetails mDetails = realm.createObject(MessageDetails.class);
mDetails.setMessage(etMessage.getText().toString());
mDetails.setIncoming(msgInOrOutBoolean);
mDetails.setLastPos(msgTypeOutgoingOrIncoming);
myData.add(pos,mDetails);
我认为您不应该每次添加一条消息时都替换整个用户列表(性能方面)。请尝试user.setMessageDetails().add(mDetails);//将详细信息传递给updateMsgInRealm。类似示例:-第二个示例UniversityStudent,但我有每个用户的消息列表。我需要将其存储为列表、数组列表或领域列表我尝试使用这个user.setMessageDetails((RealmList)realm.copyToRealm(myData));但它的崩溃显示列表不能转换为realmlish您可以参考第二个示例。学生大学银行伙伴给你宝贵的时间
MessageDetails mDetails = realm.createObject(MessageDetails.class);
mDetails.setMessage(etMessage.getText().toString());
mDetails.setIncoming(msgInOrOutBoolean);
mDetails.setLastPos(msgTypeOutgoingOrIncoming);
myData.add(pos,mDetails);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// here you need to use above code
final User user = realm.where(User.class).equalTo("id", mPref.getCurrentSelectedUserId()).findFirst();
assert user != null;
user.setMessageDetails(myData);
}
});