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
并修复了
我正在尝试将对象从 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
并修复了