将Kotlin Parcelable数据类放入java捆绑包中不会';行不通
我正在使用一个Android项目,在这个项目中,我同时使用Java和Kotlin,我有一个Kotlin数据类,实现了Parcelable(这个类中的一些属性是定制的Java POJO类,它也实现了Parcelable) 当我试图在编译时将该类作为将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
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意图中的数据类。