【问题标题】:java.lang.IllegalArgumentException: Ilegal value, when I try to pass object via bundlejava.lang.IllegalArgumentException:非法值,当我尝试通过捆绑传递对象时
【发布时间】:2020-12-27 01:47:42
【问题描述】:

如果我尝试使用 data.name 获取通过“Bundle”传递的值,我正在尝试将对象从“Transfer”(java)类传递给“Limit”(Kotlin)类,编译器没有报错,但是当我进入这个问题的activity时,我in​​tent中如何通过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 
                )
            )
        }
    }

输出 当我进入活动时:

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

【问题讨论】:

    标签: java android kotlin android-activity


    【解决方案1】:

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

    【讨论】:

    • Alexander,感谢您的回复,我会实施并给您反馈。
    • 仅用于序列化class UserModel: Serializable
    【解决方案2】:

    您需要创建类Parcelable,您要通过Bundle 传递其对象。

    在你的毕业典礼中:

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

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

    @Parcelize
    data class UserModel(
    
        val name: String? = "",
        val age: String? ="",
        val idNumber: String? ="",
        val occupation: String? ="",
        val formation: String? ="",
    ) : Parcelable
    

    【讨论】:

    • @Parcelize 不再是实验性的
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      相关资源
      最近更新 更多