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

java.lang.IllegalArgumentException: Ilegal value, when I try to pass object via bundle

我正在尝试将对象从 class“传输”(java) 传递到 class“限制”(Kotlin),如果我尝试获取values that come through the "Bundle" using data.name, 编译器没有报错,但是当我进入这个问题的activity时,如何通过Bundle()得到一个对象在我的意图中?

public class Transfer {
    
    private void sendBundle(){
        Usermodel doTransfer = fillUserModel();
        Limit.intentTransfer(doTransfer, "France");
    }
    
    
    private UserModel fillUserModel() {
        Usermodel newUserModel = new Usermodel();
        usermodel.setName("Jonas");
        userModel.setAge("30");
        usermodel.setIdNumber("123458");
        userModel.setOccupation("dev");
        userModel.setFormation("CC");
        
        return newUserModel ;
    }

}


class UserModel(

    val name: String? = "",
    val age: String? ="",
    val idNumber: String? ="",
    val occupation: String? ="",
    val formation: String? ="",
)

class Limit {

     private val data: Usermodel by bindBundle(DATA)

     private val country: String by bindBundle(COUNTRY)

     override fun onCreate(savedInstanceState: Bundle?) {

      //here I can get the values ​​using  data.name or data.age 
      //  and android studio does not point out error

}


companion object {
  
    const val DATA = "data"
    const val COUNTRY= "CountryUser"
}


fun intentTransfer (test : UserModel, CountryUser : String)
 : Intent {
        return Intent(context, Limit::class.java).apply {
            putExtras(
                BundleOf(
                    DATA to test,
                    COUNTRY to CountryUser 
                )
            )
        }
    }

输出 当我输入 ACTIVITY:

 java.lang.IllegalArgumentException: Ilegal value type android.model.UserModel for key "data"

您的 UserModel class 无法被 bundle 识别为 Serializable 或 Parcelable。尝试实现其中之一,错误就会消失。

您需要使 class Parcelable 您要传递的对象 Bundle

在你的gradle中:

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

您的数据 class 应该是这样的:

@Parcelize
data class UserModel(

    val name: String? = "",
    val age: String? ="",
    val idNumber: String? ="",
    val occupation: String? ="",
    val formation: String? ="",
) : Parcelable

这个问题我花了半天时间。我的应用因同样的错误而崩溃。
但是我使用 kotlinx.serialization 注释,甚至无法想象我需要另外提及序列化
甚至 AS 也能看到这个参数是 Serializable!
刚刚在代码中添加了 java.io.Serializable 并修复了