Дооснащение броском моши EOFException - PullRequest
0 голосов
/ 05 апреля 2020

В моем проекте я использую 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 сетевых вызовов. Я не могу понять, почему это исключение бросается.

...