J'ai essayé de passer un Extra à une autre activité en utilisant intent.putExtra ("result", resultBean) mais j'ai cette erreur suivante
class ResultBean private constructor(parcel: Parcel) : Parcelable {
@SerializedName("id")
private var mId: Int? = null
@SerializedName("name")
private var mName: String? = ""
@SerializedName("status")
private var mStatus: String? = ""
@SerializedName("species")
private var mSpecies: String? = ""
@SerializedName("gender")
private var mGender: String? = ""
@SerializedName("image")
private var mImageUrl: String? = ""
init {
mId = parcel.readInt()
mName = parcel.readString()
mStatus = parcel.readString()
mSpecies = parcel.readString()
mGender = parcel.readString()
mImageUrl = parcel.readString()
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeInt(mId!!)
dest.writeString(mName)
dest.writeString(mStatus)
dest.writeString(mSpecies)
dest.writeString(mGender)
dest.writeString(mImageUrl)
}
override fun describeContents(): Int {
return 0
}
fun getId(): Int {
return mId!!
}
fun getName(): String {
if (mName == null) {
mName = ""
}
return mName!!
}
fun getStatus(): String {
if (mStatus == null) {
mStatus = ""
}
return mStatus!!
}
fun getSpecies(): String {
if (mSpecies == null) {
mSpecies = ""
}
return mSpecies!!
}
fun getGender(): String {
if (mGender == null) {
mGender = ""
}
return mGender!!
}
fun getImageUrl(): String {
if (mImageUrl == null) {
mImageUrl = ""
}
return mImageUrl!!
}
companion object {
@SuppressLint("ParcelCreator")
val CREATOR: Parcelable.Creator<ResultBean> = object : Parcelable.Creator<ResultBean> {
override fun createFromParcel(parcel: Parcel): ResultBean {
return ResultBean(parcel)
}
override fun newArray(size: Int): Array<ResultBean?> {
return arrayOfNulls(size)
}
}
}
}
J'ai essayé de trouver la solution via stackoverflow mais Je ne l'ai pas trouvé.
J'ai essayé de suivre la même séquence entre readparcel et writeparcel mais cela n'a rien changé.
voici mon code suivant:
Activité :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user_details)
ButterKnife.bind(this)
AndroidInjection.inject(this)
mPresenter.subscribe(this)
displayAllUserInformation(intent.getParcelableExtra("result"))
}
Bean:
android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.tai.androidtai.domain.bean.ResultBean
Merci pour votre aide
3 Réponses :
Je ne sais pas pourquoi mais je dois juste ajouter "@JvmField" au-dessus de val CREATOR
Le problème est d'écrire ou de lire le colis. Pour résoudre le problème, supprimez toutes les méthodes d'implémentation ou remplacées de parcelable, puis remplacez à nouveau la méthode par une implémentation appropriée. Il vous suffit d'appuyer sur Alt + Entrée pour remplacer les méthodes.
La syntaxe que vous avez écrite a un problème et JVM ne peut pas la reconnaître comme CREATOR pour le Parcelable . Au lieu de ceci:
companion object CREATOR : Parcelable.Creator<SavedState> {
override fun createFromParcel(parcel: Parcel): ResultBean {
return ResultBean(parcel)
}
override fun newArray(size: Int): Array<ResultBean?> {
return arrayOfNulls(size)
}
}
Utilisez cette syntaxe:
companion object {
@SuppressLint("ParcelCreator")
val CREATOR: Parcelable.Creator<ResultBean> = object : Parcelable.Creator<ResultBean> {
override fun createFromParcel(parcel: Parcel): ResultBean {
return ResultBean(parcel)
}
override fun newArray(size: Int): Array<ResultBean?> {
return arrayOfNulls(size)
}
}
}