Я использую кодировку Moshi в проекте, который я выполняю, и получаю ошибку java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
в сгенерированном универсальном классе JsonAdapter для ApiResponse.
ApiResponse.kt Здесь ApiResponse имеет @JsonClass (generateAdapter = true)аннотация для генерации JsonAdapter.
@JsonClass(generateAdapter = true)
data class ApiResponse<T>(@Json(name = "header") var header: Header?, @Json(name = "body") var body: T? = null) {
@JsonClass(generateAdapter = true)
data class Header(
@Json(name = "responseCode") var responseCode: Int,
@Json(name = "customerMessage") var customerMessage: String,
)
}
Сгенерированный ApiResponseJsonAdapter.kt
class ApiResponseJsonAdapter<T>(moshi: Moshi, types: Array<Type>) : JsonAdapter<ApiResponse<T>>() {
private val options: JsonReader.Options = JsonReader.Options.of("header", "body")
private val nullableHeaderAdapter: JsonAdapter<ApiResponse.Header?> =
moshi.adapter<ApiResponse.Header?>(ApiResponse.Header::class.java, kotlin.collections.emptySet(), "header")
private val nullableTNullableAnyAdapter: JsonAdapter<T?> =
moshi.adapter<T?>(types[0], kotlin.collections.emptySet(), "body")
override fun toString(): String = "GeneratedJsonAdapter(ApiResponse)"
override fun fromJson(reader: JsonReader): ApiResponse<T> {
var header: ApiResponse.Header? = null
var body: T? = null
var bodySet: Boolean = false
reader.beginObject()
while (reader.hasNext()) {
when (reader.selectName(options)) {
0 -> header = nullableHeaderAdapter.fromJson(reader)
1 -> {
body = nullableTNullableAnyAdapter.fromJson(reader)
bodySet = true
}
-1 -> {
// Unknown name, skip it.
reader.skipName()
reader.skipValue()
}
}
}
reader.endObject()
var result = ApiResponse<T>(
header = header)
result = result.copy(
body = if (bodySet) body else result.body)
return result
}
override fun toJson(writer: JsonWriter, value: ApiResponse<T>?) {
if (value == null) {
throw NullPointerException("value was null! Wrap in .nullSafe() to write nullable values.")
}
writer.beginObject()
writer.name("header")
nullableHeaderAdapter.toJson(writer, value.header)
writer.name("body")
nullableTNullableAnyAdapter.toJson(writer, value.body)
writer.endObject()
}
}
ApiAdapterFactory
val type = Types.newParameterizedType(ApiResponse::class.java)
val adapter = Moshi.Builder().build().adapter<ApiResponse<T>>(type)
val apiResponse = adapter.fromJson(jsonResponse) as ApiResponse<T>
when (response.code()) {
200 -> Result.Success(apiResponse, null)
else -> Result.Failure(ApiError())
}
Поэтому, когда я пытаюсь получить ApiResponse из ответа JsonЯ получаю сообщение об ошибке ArrayIndexOutOfBoundsException в файле ApiResponseJsonAdapter.kt при инициализации переменной « nullableTNullableAnyAdapter ».
Что здесь может быть не так?