>

이상한 문제가 발생했습니다. 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

    같은 문제가 발생했습니다. 이것이 내가 해결할 수있는 방법입니다 :

    arrayOfA = intent.getParcelableArrayExtra("array").map { it as A }.toTypedArray()

    어떤 이유로 든 작동하지 않습니다 :

    arrayOfA = intent.getParcelableArrayExtra("array") as Array<A>

    안타깝게도 경고를 표시합니다

    와이즈 비즈

    런타임 예외

    와이즈 비즈

  • 답변 # 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

  • 이전 python - apply lambda가있는 데이터 프레임에서 if 문을 구현하는 올바른 방법을 알 수 없습니다
  • 다음 java - SMACK OMEMO를 사용하여 그룹 채팅 또는 MUC에 지문을 생성하는 방법은 무엇입니까?