В моем проекте я использую Retrofit вдоль стороны moshi для анализа ответов json.
Я создал обобщенный c класс-оболочку для ответа сервера
@JsonClass(generateAdapter = true)
data class ResultsResponse<out T>(
@field:Json(name = "data")
val results: List<T>
)
и это класс для фактических данных json
@Parcelize
@JsonClass(generateAdapter = true)
data class Teacher(
@field:Json(name = "id") override val id: Int,
@field:Json(name = "profile") val profile: Profile?,
@field:Json(name = "company") val company: Company?,
@field:Json(name = "organization") val organization: Organization?
)
, которые я использую в качестве возвращаемого значения для каждой из функций интерфейса модернизации
@GET("teachers/{id}")
suspend fun getTeacher(
@Path("id") id: Int,
@Query("include") relations: String = "",
@QueryMap query: Map<String, String> = mapOf()
): Response<ResultResponse<Teacher>>
В большинстве случаев json анализируется нормально, но бывают случаи, когда Моши выдает следующее исключение
W/System.err: java.io.EOFException: End of input
at com.squareup.moshi.JsonUtf8Reader.nextNonWhitespace(JsonUtf8Reader.java:1057)
at com.squareup.moshi.JsonUtf8Reader.doPeek(JsonUtf8Reader.java:252)
W/System.err: at com.squareup.moshi.JsonUtf8Reader.hasNext(JsonUtf8Reader.java:185)
at com.adelve.findmyteacher.data.models.network_responses.ResultsResponseJsonAdapter.fromJson(ResultsResponseJsonAdapter.kt:35)
at com.adelve.findmyteacher.data.models.network_responses.ResultsResponseJsonAdapter.fromJson(ResultsResponseJsonAdapter.kt:20)
at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:40)
at com.squareup.moshi.JsonAdapter$2.fromJson(JsonAdapter.java:161)
at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(MoshiResponseBodyConverter.java:45)
at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(MoshiResponseBodyConverter.java:27)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:227)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:142)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:140)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Возможно ли, что Моши не go хорошо работает с классом-оболочкой generi c, который я использую и мне нужно создать свой? Или проблема где-то еще. Это исключение происходит в среднем 4/10 сетевых вызовов. Я не могу понять, почему это исключение бросается.