Массив массивов строк должен быть разделен на части. Объект такой
data class Foo (
@SerializedName("bar") val bar: ArrayList<ArrayList<String>>,
)
Это не обязательно должен быть ArrayList. Также можно использовать массив.
data class Foo (
@SerializedName("bar") val bar: Array<Array<String>>,
)
В зависимости от того, что проще, можно сопоставить эти данные json
{
"bar": [
["a", "b"],
["a1", "b2", "c2"],
["a3", "b34", "c432"]
]
}
Использование kotlin Experiment Parcelize приводит к сбою приложения, когда оно скомпилировано с помощью progaurd
Как это пишется в "writeToParcel" и читается в "конструкторе"?
data class Foo (
@SerializedName("bar") val bar: ArrayList<ArrayList<String>>,
) : Parcelable {
constructor(source: Parcel) : this(
// ?????
)
override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
// ?????
}
}
Вы не можете напрямую создать Parcelable для List из List, поэтому одно из решений состоит в том, чтобы сделать один подкласс желаемого List как Parcelable и использовать его в качестве окончательного типа списка. Как? посмотрите ниже :
Давайте сначала создадим наш внутренний класс List of String, как показано ниже:
class StringList() : ArrayList<String>(), Parcelable {
constructor(source: Parcel) : this() {
source.createStringArrayList()
}
override fun describeContents() = 0
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeStringList(this@StringList)
}
companion object {
@JvmField
val CREATOR: Parcelable.Creator<StringList> = object : Parcelable.Creator<StringList> {
override fun createFromParcel(source: Parcel): StringList = StringList(source)
override fun newArray(size: Int): Array<StringList?> = arrayOfNulls(size)
}
}
}
Что мы сделали здесь, так это создали наш ArrayList<String> разделяемый объект, чтобы мы могли использовать его в любой конечной точке.
Таким образом, окончательный класс данных будет иметь следующую реализацию:
data class Foo(@SerializedName("bar") val bar: List<StringList>) : Parcelable {
constructor(source: Parcel) : this(
source.createTypedArrayList(StringList.CREATOR)
)
override fun describeContents() = 0
override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
writeTypedList(bar)
}
companion object {
@JvmField
val CREATOR: Parcelable.Creator<Foo> = object : Parcelable.Creator<Foo> {
override fun createFromParcel(source: Parcel): Foo = Foo(source)
override fun newArray(size: Int): Array<Foo?> = arrayOfNulls(size)
}
}
}
Примечание. Это простая реализация на основе О.П., вы можете выполнить любую настройку в соответствии с вашими требованиями.
используйте сериализуемый для решения этой сложности.