欢快的冰淇淋 · kotlin判断字符串是否全数字 | 我的开发笔记· 3 天前 · |
气势凌人的苦咖啡 · 字符串(Strings) | Kotlin ...· 3 天前 · |
微笑的水桶 · Kotlin 类型转换 | 马上学123· 3 天前 · |
急躁的番茄 · Kotlin程序检查字符串是否为数字 | ...· 3 天前 · |
谈吐大方的佛珠 · Kotlin 类型转换 - ...· 3 天前 · |
重感情的葡萄酒 · 条款和条件 - CliniCall· 2 月前 · |
成熟的春卷 · URL重写 · ...· 2 月前 · |
冷静的树叶 · 老联发科一键就能解BL锁!无需清空数据!没解 ...· 6 月前 · |
叛逆的花生 · Kindle Oasis 到了第三代 - 知乎· 1 年前 · |
仗义的冲锋衣 · 罗技 Craft,体验先进的设计、创造力和高效· 1 年前 · |
我遇到了一个奇怪的问题。我有一个用kotlin实现Parcelable接口的A类。
我将A类的数组从一个活动传递到另一个活动,这里没有问题。
var arrayOfA:Array<A> // just to tell the type assume the array is initialised with the value
intent.putExtra("array", arrayOfA)
但是当我在另一个活动中接收它时,我不能将它赋值给类型为Array的变量,它要求我在A为parcelable类型时将它赋值给Array,这就是为什么我不能给它赋值的原因。
in second Activity
var arrayOfA:Array<A>?=null
arrayA=intent.get("array") as Array<A> // Problem here. Class cast exception
我不能理解为什么。有人能帮我一下吗。我不想将变量类型更改为Array,因为它有很多内部依赖项(这里的类只是一个演示)。
========================================
class A(val a:String?,val b:String?):Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString()) {
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(a)
parcel.writeString(b)
override fun describeContents(): Int {
return 0
companion object CREATOR : Parcelable.Creator<A> {
override fun createFromParcel(parcel: Parcel): A {
return A(parcel)
override fun newArray(size: Int): Array<A?> {
return arrayOfNulls(size)
}
发布于 2019-05-30 05:27:28
我遇到了同样的问题。这就是我能够解决这个问题的方法:
arrayOfA = intent.getParcelableArrayExtra("array").map { it as A }.toTypedArray()
由于某些原因,这不起作用:
arrayOfA = intent.getParcelableArrayExtra("array") as Array<A>
不幸的是,这显示出一个警告
未检查强制转换: Array<(out)可打包!>!到数组)
和运行时异常
java.lang.ClassCastException:无法将android.os.Parcelable[]强制转换为com.company.app.A[]
发布于 2019-05-30 05:45:51
Bundle.getParcelableArray
(和
Intent.getParcelableArrayExtra
)返回
Parcelable[]
。您不能将
Parcelable[]
转换为
MyClass[]
。您可以将
Parcelable[]
的元素强制转换为
MyClass
。
请改用
Bundle.getParcelableArrayList
(或其对应的
Intent
),因为它具有泛型类型。
var values: List<MyClass> = listOf(...)
intent.putParcelableArrayListExtra("key", values.asArrayList())
values = intent.getParcelableArrayListExtra("key")!!
fun <E> List<E>.asArrayList(): ArrayList<E> = this as? ArrayList<E> ?: ArrayList(this)
发布于 2017-09-12 14:01:26
您需要使用
getParcelableArrayExtra
检索
Parcelable
对象,如下所示
arrayA = intent.getParcelableArrayExtra("array") as Array<A?>
将
class A
转换为
Nullable
,因为在kotlin语言中不能将
Nullable
转换为
Non Nullable
创建者应如下所示
companion object CREATOR : Parcelable.Creator<A?> {
override fun createFromParcel(parcel: Parcel): A? {
return A(parcel)
欢快的冰淇淋 · kotlin判断字符串是否全数字 | 我的开发笔记 3 天前 |
微笑的水桶 · Kotlin 类型转换 | 马上学123 3 天前 |
急躁的番茄 · Kotlin程序检查字符串是否为数字 | 马上学123 3 天前 |
重感情的葡萄酒 · 条款和条件 - CliniCall 2 月前 |
叛逆的花生 · Kindle Oasis 到了第三代 - 知乎 1 年前 |
仗义的冲锋衣 · 罗技 Craft,体验先进的设计、创造力和高效 1 年前 |