android - 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 $
这个怎么做??
解决方案
这就是我现在使用 Gson 的方式:
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
..
JSONArray(Gson().toJson(response.body()))
无需<List<Memes>>
更换<JSONArray>
推荐阅读
- mysql - sql 从列中描述的表名中选择
- maven - 升级时未执行 XL 部署插件命令
- android - 防止 OkHTTP 对 RequestBody 进行 URL 编码
- java - maven 如何知道需要从目标调用哪个插件?
- java - 在存储在哈希集中的生成代码中查找单词
- java - 不能在 Java 9 中使用 jcl-over-slf4j
- carrierwave - 如果版本处理失败,文件不会被存储(挂载)
- permissions - 多个非管理员用户可以在不同用户下读写的注册表项位置?
- git - 从最近的合并提交中获取分支名称
- wordpress - 子域上的 http 重定向到主域;子域与 https 一起使用