Ошибка с модификацией и моши при разборе JSON - PullRequest
0 голосов
/ 13 октября 2019

Я использую Kotlin и хочу использовать модификацию для использования API imgur, но у меня появляется эта ошибка, когда мой запрос отправляется, и я получаю ответ:

"E / Retrofit: Ожидается BEGIN_ARRAYно был BEGIN_OBJECT по пути $ "

Итак, вот что я получил:

{" data ": [" TY5OVQo "]," success ": true,"status": 200}

Исходя из этого, у меня есть этот класс данных:

@JsonClass(generateAdapter = true)
data class ImgurBasic<T>(@Json(name = "data") val data: T,
                         @Json(name = "success") val success: Boolean,
                         @Json(name = "status") val status: Int)

Я использую этот интерфейс, когда я вызвал дооснащение:

interface Imgur {
    @GET("3/account/{username}/images/ids")
    fun getImages(@Path("username") username: String): Call<List<ImgurBasic<List<String>>>>
}

И как я использую модификацию и моши:

val header = StringBuilder("Bearer ").append(AuthSettings.data!!.accessToken!!).toString()
val client = OkHttpClient.Builder()
client.addInterceptor { chain ->
    val original = chain.request()
    val requestBuilder = original.newBuilder()
        .header("Authorization", header)

    val request = requestBuilder.build()
    chain.proceed(request)
}
val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
val service = Retrofit.Builder()
    .baseUrl(baseUrl)
    .client(client.build())
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .build()
    .create(Imgur::class.java)
    .getImages(AuthSettings.data!!.accountUsername!!)
    .enqueue(object : Callback<List<ImgurBasic<List<String>>>> {
        override fun onResponse(call: Call<List<ImgurBasic<List<String>>>>, response: Response<List<ImgurBasic<List<String>>>>) {
            val body = response.body()
            Log.d("Retrofit", response.message())
            Log.d("Retrofit", if (response.isSuccessful) "true" else "false")

            if (body != null) {
                // Parse data
            }
        }

        override fun onFailure(call: Call<List<ImgurBasic<List<String>>>>, t: Throwable) {
            Log.e("Retrofit", t.message) // Error Here
        }
    })

В моем классе данных я поместил шаблон, потому что данные могут быть различного типа

Заранее спасибо

PS:Извините за мой английский ^^

1 Ответ

0 голосов
/ 13 октября 2019

Хорошо, я наконец нашел ответ, я просто посмотрел не туда:

Call<List<ImgurBasic<List<String>>>>

должно быть:

Call<ImgurBasic<List<String>>>

Я был сосредоточен на содержании ImgurBasic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...