Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AndroidKotlin:ParcelableArrayList适用于片段参数,但在intent extra中使用时崩溃_Android_Kotlin_Parcelable_Badparcelableexception - Fatal编程技术网

AndroidKotlin:ParcelableArrayList适用于片段参数,但在intent extra中使用时崩溃

AndroidKotlin:ParcelableArrayList适用于片段参数,但在intent extra中使用时崩溃,android,kotlin,parcelable,badparcelableexception,Android,Kotlin,Parcelable,Badparcelableexception,我试图在我用Kotlin编写的Android应用程序中使用ParcelableArrayList传递一些数据 数据类非常简单: package com.example.testapp import android.os.Parcel import android.os.Parcelable class Data(val name: String, val size: Long): Parcelable { override fun writeToParcel(dest: Parce

我试图在我用Kotlin编写的Android应用程序中使用ParcelableArrayList传递一些数据

数据类非常简单:

package com.example.testapp

import android.os.Parcel
import android.os.Parcelable

class Data(val name: String, val size: Long): Parcelable {

    override fun writeToParcel(dest: Parcel, flags: Int) {
        dest.writeString(name)
        dest.writeLong(size)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object {
        val CREATOR = object: Parcelable.Creator<Data> {
            override fun createFromParcel(source: Parcel): Data {
                val name = source.readString()!!
                val size = source.readLong()!!
                return Data(name, size)
            }

            override fun newArray(size: Int) = arrayOfNulls<Data>(size)
        }
    }
}
谁能帮我指出我做错了什么?我整晚都在做这个


非常感谢。

尝试用以下代码替换数据类

class Data(val name: String, val size: Long): Parcelable {
constructor(parcel: Parcel) : this(
        parcel.readString(),
        parcel.readLong()) {
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeString(name)
    parcel.writeLong(size)
}

override fun describeContents(): Int {
    return 0
}

companion object CREATOR : Parcelable.Creator<Data> {
    override fun createFromParcel(parcel: Parcel): Data {
        return Data(parcel)
    }

    override fun newArray(size: Int): Array<Data?> {
        return arrayOfNulls(size)
    }
}
}
类数据(val名称:字符串,val大小:长):可包裹{
构造函数(地块:地块):此(
parcel.readString(),
parcel.readLong()){
}
覆盖地块(地块:地块,标志:Int){
包裹。书写(名称)
包裹写入长度(大小)
}
覆盖有趣的描述内容():Int{
返回0
}
同伴对象创建者:Parcelable.CREATOR{
替代createFromParcel(地块:地块):数据{
返回数据(包裹)
}
覆盖新数组(大小:Int):数组{
返回阵列fnulls(大小)
}
}
}

谢谢,宣布伴侣对象创建者工作。我想知道为什么我的val CREATOR=object:Parcelable.CREATOR用于片段参数?或者,你知道,
@Parcelize类数据(val name:String,val size:Long):Parcelable{}
,完成。或者,原始的
CREATOR
缺少
@JvmField
注释。
var dataArray = intent?.getParcelableArrayListExtra<Data>("DataList")!!
dataArray.forEach{
    Log.d("XXX", "Get data name=${it.name}, size=${it.size}")
}

Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.example.testapp.Data
        at android.os.Parcel.readParcelableCreator(Parcel.java:3063)
        at android.os.Parcel.readParcelable(Parcel.java:2981)
        at android.os.Parcel.readValue(Parcel.java:2883)
        at android.os.Parcel.readListInternal(Parcel.java:3324)
        at android.os.Parcel.readArrayList(Parcel.java:2467)
        at android.os.Parcel.readValue(Parcel.java:2904)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:3261)
        at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
        at android.os.BaseBundle.unparcel(BaseBundle.java:236)
        at android.os.Bundle.getParcelableArrayList(Bundle.java:1005)
        at android.content.Intent.getParcelableArrayListExtra(Intent.java:8605)
        at com.example.testapp.SecondActivity.onCreate(SecondActivity.kt:12)
        at android.app.Activity.performCreate(Activity.java:7981)
        at android.app.Activity.performCreate(Activity.java:7970)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:237) 
        at android.app.ActivityThread.main(ActivityThread.java:7762) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047) 
class Data(val name: String, val size: Long): Parcelable {
constructor(parcel: Parcel) : this(
        parcel.readString(),
        parcel.readLong()) {
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeString(name)
    parcel.writeLong(size)
}

override fun describeContents(): Int {
    return 0
}

companion object CREATOR : Parcelable.Creator<Data> {
    override fun createFromParcel(parcel: Parcel): Data {
        return Data(parcel)
    }

    override fun newArray(size: Int): Array<Data?> {
        return arrayOfNulls(size)
    }
}
}