Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 ';价值';不是有效的托管对象。在域中存储列表时_Android_Arraylist_Realm_Local Storage - Fatal编程技术网

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);

    }
});