Я пытался отправить массив строк с использованием parcel в kotlin, я пробовал несколько вещей, таких как преобразование в массив перед использованием writeTypedArray или непосредственное использование writeStringArray.Я также пытался читать, используя createTypedArray и createStringArray.
В большинстве случаев содержимое, которое я получаю, является правильным (я имею в виду, что внутренняя часть массива не изменяется), но есть некоторый случай, когда он становитсяNULL и некоторые ссылки в массиве.
Я проверил свой код и распечатал его до и после использования намерения, и именно в этом заключается разница, поэтому я думаю, что ошибка заключается в посылке
Это место, где я ставлю свои намерения, когда я вызываю showGenres (), его шоу точно соответствует жанрам, таким как Comedy и Slice of Life
val anime : Anime = news.anime
val intent : Intent = Intent(holder.btnViewMore.context, DetailActivity::class.java)
news.anime.showGenres()
intent.putExtra("choosen", anime)
holder.btnViewMore.context.startActivity(intent)
, но после того, как яполучить намерение, когда я вызываю showGenres, содержимое становится пустым (большинство из них), и некоторая строка типа "P�� https://s4.anilist.co/file/anilistcdn/media/anime/banner/104199-ha1rxhhOb8Yp.jpg��������Comedy������Slice".
anime = intent.getParcelableExtra("choosen")
anime.showGenres()
введите описание изображения здесь
Ниже приведены мои классы, которые используют parcellable
package com.example.jnimekuy.Model
import android.os.Parcel
import android.os.Parcelable
import android.util.Log
class Anime(
var id: Int = 0,
var title: String? = "",
var image: String? = "",
var description: String? = "",
var status: String? = "",
var startDate: String? = "",
var endDate: String? = "",
var season: String? = "",
var episode: Int? = 1,
var duration: Int? = 1,
var trailer: String? = "",
var cover: String? = "",
var banner: String? = "",
var genreList: List<String>? = ArrayList(),
var avgScore: Float? = 1F
):Parcelable{
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString(),
parcel.readString(),
parcel.readString()?.replace("<br>","",true),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readInt(),
parcel.readInt(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.createStringArrayList()?.filterNotNull(),
parcel.readFloat()
)
override fun writeToParcel(parcel: Parcel, p1: Int) {
parcel.writeInt(id)
parcel.writeString(title)
parcel.writeString(image)
parcel.writeString(description)
parcel.writeString(status)
parcel.writeString(startDate)
parcel.writeString(endDate)
parcel.writeString(season)
episode?.let { parcel.writeInt(it) }
duration?.let { parcel.writeInt(it) }
parcel.writeString(trailer)
parcel.writeString(cover)
parcel.writeString(banner)
parcel.writeStringList(genreList)
avgScore?.let { parcel.writeFloat(it) }
}
fun showGenres(){
for(i in this!!.genreList!!)
{
Log.d("genre",i)
}
}
override fun describeContents(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
companion object CREATOR : Parcelable.Creator<Anime> {
override fun createFromParcel(parcel: Parcel): Anime {
return Anime(parcel)
}
override fun newArray(size: Int): Array<Anime?> {
return arrayOfNulls(size)
}
}
}