이상한 문제가 발생했습니다. 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가 소포 가능 유형 인 경우 변수에 할당 할 수없는 이유는 Array에 할당하도록 요청하는 것입니다.
in second Activity
var arrayOfA:Array<A>?=null
arrayA=intent.get("array") as Array<A> // Problem here. Class cast exception
이유를 이해할 수 없습니다. 어떤 사람이 나를 도울 수 있습니까? inter depedencies만큼 많은 변수 유형을 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)
}
}
}
- 답변 # 1
- 답변 # 2
Unchecked cast: Array<(out) Parcelable!>! to Array)
java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.company.app.A[]
getParcelableArrayExtra
와이즈 비즈 만들기
Parcelable
로arrayA = intent.getParcelableArrayExtra("array") as Array<A?>
를 캐스팅 할 수 없기 때문에 온통class A
로 코 틀린에서제작자는 아래와 같습니다
Nullable
- 답변 # 3
Nullable
(그리고Non Nullable
) 반환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) } }
.Bundle.getParcelableArray
를 캐스팅 할 수 없습니다Intent.getParcelableArrayExtra
로 .Parcelable[]
의요소를 캐스팅 할 수 있습니다.Parcelable[]
로 .MyClass[]
사용 (또는 그Parcelable[]
상대 형식) 대신 일반 형식이므로MyClass
Bundle.getParcelableArrayList
- android : Dagger2 삽입 그래프
- android : 문자열 참조의 초보자 문제 문제
- android : 데이터 클래스 kotlin에서 작동하지 않는 모든 데이터 유형
- kotlin android에서 Recyclerview 필터가 작동하지 않음
- Android, onClick of Button이 내장 된 애니메이션을 완료하기 전에 실행됩니다.
- android : 취약한 의도 리디렉션으로 인해 Play 스토어에서 애플리케이션 마지막 업데이트를 거부했습니다.
- android : Retrofit은 ASP.net Core 컨트롤러를 호출하지 않습니다.
- android : Firestore는 알 수없는 열거 형 유형을 역 직렬화합니다.
- java : 일반 유형을 포함하는 목록에 대해 Jackson에서 사용자 지정 deserializer를 만드는 방법은 무엇입니까?
- android : getStringExtra () 함수는 Intent {(추가 항목 있음)}을 반환합니다.
같은 문제가 발생했습니다. 이것이 내가 해결할 수있는 방법입니다 :
arrayOfA = intent.getParcelableArrayExtra("array").map { it as A }.toTypedArray()
어떤 이유로 든 작동하지 않습니다 :
arrayOfA = intent.getParcelableArrayExtra("array") as Array<A>
안타깝게도 경고를 표시합니다
와이즈 비즈런타임 예외
와이즈 비즈