无法在写事务(领域+;Android)之外修改托管对象

无法在写事务(领域+;Android)之外修改托管对象,android,kotlin,realm,realm-mobile-platform,Android,Kotlin,Realm,Realm Mobile Platform,我已经实现了以下方法来从realmdb更新UserProfile override fun updateCurrentUser(userProfile: UserProfile, successAction: () -> Unit) { val realm = Realm.getDefaultInstance() realm.executeTransactionAsync( object : Realm.Transaction

我已经实现了以下方法来从realmdb更新
UserProfile

override fun updateCurrentUser(userProfile: UserProfile, successAction: () -> Unit) {
        val realm = Realm.getDefaultInstance()
        realm.executeTransactionAsync(
                object : Realm.Transaction {
                    override fun execute(realm: Realm) {

                        val user = realm.where(UserProfile::class.java).equalTo("userName", userProfile.userName).findFirst()
                        user?.firstName = userProfile.firstName
                        user?.lastName = userProfile.lastName
                        user?.gender = userProfile.gender
                        user?.height = userProfile.height
                        user?.weight = userProfile.weight
                        user?.dob = userProfile.dob
                        user?.firstTimeSetupDone = true

                    }
                },
                object : Realm.Transaction.OnSuccess {
                    override fun onSuccess() {
                        Log.i(TAG, "Saved User successfully with $userProfile")
                        successAction()
                    }

                },
                object : Realm.Transaction.OnError {
                    override fun onError(error: Throwable?) {
                        Log.e(TAG, "Error saving user", error)
                    }
                }
        )
    }
但即使我在
realm.executeTransactionAsync

java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction.
                                                                            at io.realm.internal.Table.throwImmutable(Table.java:674)
                                                                            at io.realm.internal.Table.checkImmutable(Table.java:549)
                                                                            at io.realm.internal.UncheckedRow.setString(UncheckedRow.java:230)
                                                                            at io.realm.UserProfileRealmProxy.realmSet$firstName(UserProfileRealmProxy.java:209)
                                                                            at saukya.wellness.mobile.services.data.domain.UserProfile.setFirstName(UserProfile.kt:27)
                                                                            at saukya.wellness.mobile.ui.onboarding.OnBoardingPresenter.submitData(OnBoardingPresenter.kt:102)
                                                                            at saukya.wellness.mobile.ui.onboarding.OnBoardingActivity.submitData(OnBoardingActivity.kt:106)
                                                                            at saukya.wellness.mobile.ui.onboarding.OnBoardingHealthInfoFragment$setupNextButton$1.onClick(OnBoardingHealthInfoFragment.kt:86)
                                                                            at android.view.View.performClick(View.java:5646)
                                                                            at android.view.View$PerformClick.run(View.java:22459)
                                                                            at android.os.Handler.handleCallback(Handler.java:761)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                            at android.os.Looper.loop(Looper.java:156)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6523)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

领域查询的对象无法修改,解决此问题的简单方法是新建一个对象,将领域对象字段复制到此新对象。如果要持久化,请调用insertOrUpdate方法将其保存在域中。

您在
submitData
中遇到异常。这是
updateCurrentUser