将Kotlin Parcelable数据类放入java捆绑包中不会';行不通

将Kotlin Parcelable数据类放入java捆绑包中不会';行不通,java,android,kotlin,parcelable,parcel,Java,Android,Kotlin,Parcelable,Parcel,我正在使用一个Android项目,在这个项目中,我同时使用Java和Kotlin,我有一个Kotlin数据类,实现了Parcelable(这个类中的一些属性是定制的Java POJO类,它也实现了Parcelable) 当我试图在编译时将该类作为Intent Parcelable Extra传递时,没有错误,但当我试图在另一个活动中从Intent.getExtras().getParcelable(“Key”)检索该类时,它会引发异常 E/Parcel: Class not found when

我正在使用一个Android项目,在这个项目中,我同时使用Java和Kotlin,我有一个Kotlin数据类,实现了Parcelable(这个类中的一些属性是定制的Java POJO类,它也实现了Parcelable)

当我试图在编译时将该类作为
Intent Parcelable Extra
传递时,没有错误,但当我试图在另一个
活动中从
Intent.getExtras().getParcelable(“Key”)
检索该类时,它会引发异常

E/Parcel: Class not found when unmarshalling: 
    java.lang.ClassNotFoundException
所以我试图寻找异常的原因,并尝试了所有的答案 什么都没用

1-Koltin数据类


data class OrderResponse (
    @SerializedName("client")
    var client: RideResponse? = null,

    @SerializedName("driver")
    var driver: BigRideResponse? = null,

    @SerializedName("id")
    var id: String? = null,
    @SerializedName("rideInfo")
    var rideInfo: RideDetails? = null
) : Parcelable {
    constructor(parcel: Parcel) : this(
            parcel.readParcelable(RideResponse::class.java.classLoader),
            parcel.readParcelable(BigRideResponse::class.java.classLoader),
            parcel.readString(),
            parcel.readParcelable(RideDetails::class.java.classLoader)) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeParcelable(client, flags)
        parcel.writeParcelable(driver, flags)
        parcel.writeString(id)
        parcel.writeParcelable(rideInfo, flags)
    }

    override fun describeContents(): Int {
        return 0
    }

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

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

3-
BigRideResponse
ridereponse
相同,但带有额外字段

4-通过包裹的代码

Intent intent = new Intent(getContext(), RatingActivity.class);
        intent.putExtra(ApplicationConstants.ExtrasTag.ORDER_RESPONSE, mOrderResponse);
        getViewCallback().openRatingScreen(intent, REQUEST_CODE_RATE);
mOrderResponse = intent.getExtras().getParcelable(ApplicationConstants.ExtrasTag.ORDER_RESPONSE);

5-检索包裹的代码

Intent intent = new Intent(getContext(), RatingActivity.class);
        intent.putExtra(ApplicationConstants.ExtrasTag.ORDER_RESPONSE, mOrderResponse);
        getViewCallback().openRatingScreen(intent, REQUEST_CODE_RATE);
mOrderResponse = intent.getExtras().getParcelable(ApplicationConstants.ExtrasTag.ORDER_RESPONSE);

在浪费了一些时间之后,我尝试将
Kotlin数据类(OrderResponse)
转换为常规的Java POJO,并实现了Parcelable和boom,效果很好


因此,我猜测将
Parcelable
数据类与Java捆绑包一起使用似乎不起作用,所以我想知道确切的原因是什么?kotlin类不是映射到Java类,所以它们是相同的吗?

您需要将对象作为包裹发送,以便通过以下意图发送数据类对象:

在这里,我使用Kotlin创建intent对象

val intent = Intent(context, RatingActivity::class.java)
intent.putParcelableArrayListExtra(ApplicationConstants.ExtrasTag.ORDER_RESPONSE, mOrderResponse)
现在需要得到像这样可包裹的结果

确保像这样创建数据类的对象,并在对象中获取意图值

//object create of ArrayList
    private var mOrderResponseViaIntent= ArrayList<OrderResponse>()


    mOrderResponseViaIntent= intent.getParcelableArrayListExtra<OrderResponse>(ApplicationConstants.ExtrasTag.ORDER_RESPONSE)
//创建ArrayList的对象
private var morderresponsevent=ArrayList()
MorderResponseEvent=intent.getParcelableArrayListExtra(ApplicationConstants.ExtrasTag.ORDER_响应)

我已经知道这一点,我的用例是当我在Java活动中使用数据类作为包裹时,这就是问题所在,请阅读问题,如果您不理解,请告诉我是的!!理解你的概念。。问题是,您试图在简单java类中获取数据类(这是kotlin的概念)。因为Kotlin Lanuguage,java类不会意识到数据类(显然会通过异常)。必须使用kotlin代码才能获取parcelable意图中的数据类。