java.lang.IllegalArgumentException:当我尝试通过捆绑传递对象时,非法值

ram*_* jc 2 java android android-activity kotlin

我试图将一个对象从“Transfer”类(java)传递到“Limit”类(Kotlin),如果我尝试获取通过“ Bundle”使用data.name,编译器并没有报错,但是当我进入到这个问题的activity中时,如何在我的intent中通过Bundle()获取一个对象呢?

\n
public class Transfer {\n    \n    private void sendBundle(){\n        Usermodel doTransfer = fillUserModel();\n        Limit.intentTransfer(doTransfer, "France");\n    }\n    \n    \n    private UserModel fillUserModel() {\n        Usermodel newUserModel = new Usermodel();\n        usermodel.setName("Jonas");\n        userModel.setAge("30");\n        usermodel.setIdNumber("123458");\n        userModel.setOccupation("dev");\n        userModel.setFormation("CC");\n        \n        return newUserModel ;\n    }\n\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n
\nclass UserModel(\n\n    val name: String? = "",\n    val age: String? ="",\n    val idNumber: String? ="",\n    val occupation: String? ="",\n    val formation: String? ="",\n)\n\n
Run Code Online (Sandbox Code Playgroud)\n
class Limit {\n\n     private val data: Usermodel by bindBundle(DATA)\n\n     private val country: String by bindBundle(COUNTRY)\n\n     override fun onCreate(savedInstanceState: Bundle?) {\n\n      //here I can get the values \xe2\x80\x8b\xe2\x80\x8busing  data.name or data.age \n      //  and android studio does not point out error\n\n}\n\n\ncompanion object {\n  \n    const val DATA = "data"\n    const val COUNTRY= "CountryUser"\n}\n\n\nfun intentTransfer (test : UserModel, CountryUser : String)\n : Intent {\n        return Intent(context, Limit::class.java).apply {\n            putExtras(\n                BundleOf(\n                    DATA to test,\n                    COUNTRY to CountryUser \n                )\n            )\n        }\n    }\n\n
Run Code Online (Sandbox Code Playgroud)\n

输出\n当我进入活动时:

\n
 java.lang.IllegalArgumentException: Ilegal value type android.model.UserModel for key "data"\n\n
Run Code Online (Sandbox Code Playgroud)\n

Moh*_*ala 7

您将需要创建Parcelable您要通过Bundle.

在你的gradle中:

apply plugin: 'org.jetbrains.kotlin.android.extensions'

Run Code Online (Sandbox Code Playgroud)

你的数据类应该是这样的:

@Parcelize
data class UserModel(

    val name: String? = "",
    val age: String? ="",
    val idNumber: String? ="",
    val occupation: String? ="",
    val formation: String? ="",
) : Parcelable
Run Code Online (Sandbox Code Playgroud)