首页 > 解决方案 > Android Kotlin - retrofit2 获取 JSONArray 而不是模型列表

问题描述

interface ApiInterface {
    @Headers("Content-Type: application/json")
    @POST("testgetmemes/")
    fun getMemes(): Call<List<Memes>>

}

object ApiClient {

    var BASE_URL:String="https://www.blaaa.com/"
    val getClient: ApiInterface
        get() {

            val gson = GsonBuilder()
                .setLenient()
                .create()

            val client = OkHttpClient.Builder().build()

            val retrofit = Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build()

            return retrofit.create(ApiInterface::class.java)

        }
}

并在函数内部:

    val call: Call<List<Memes>> = ApiClient.getClient.getMemes()
    call.enqueue(object : Callback<List<Memes>> {

        override fun onResponse(call: Call<List<Memes>>?, response: Response<List<Memes>>) {
            Log.d(tagg, response!!.body()!!.toString())
            //setMemes(response!!.body()!!, gal)
        }

        override fun onFailure(call: Call<List<Memes>>?, t: Throwable?) {
            Log.d(tagg, t!!.toString())
        }

    })

我想得到 JSONArray 而不是这个准备好使用模型列表!否则我将不得不做很多改变和变通方法,因为我通常使用漂亮的 loopj,这个改造 2 的东西只是为了让 API 在旧的 Android 版本上工作。

我尝试通过将所有替换<List<Memes>><JSONArray>但随后得到以下响应:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

这个怎么做??

标签: androidkotlinretrofit2

解决方案


这就是我现在使用 Gson 的方式:

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

..

JSONArray(Gson().toJson(response.body()))

无需<List<Memes>>更换<JSONArray>


推荐阅读