我设法通过以下POKO进行了改造:
data class GifSerialList(var data: List<GifSerial>)
data class GifSerial(var id: String,
var title: String,
@SerializedName("import_datetime") var importDatetime: String,
var user: User?,
var images: Image)
data class User(@SerializedName("display_name") var userDisplayName: String)
data class Image(@SerializedName("fixed_height") var fixedHeight: Size)
data class Size(var url: String)
匹配以下json:
{
"data": [
{
"id": "oefi3of93jf2f9",
...
"import_datetime": "2014-03-29 13:55:35",
...
"user": {
...
"display_name": "User Display Name",
},
"images": {
...
"fixed_height": {
"url": "https://giflink.gif",
...
},
...
},
"title": "GIF Title",
...
},
{
具有以下改装要求:
@GET("trending")
fun getTrending(@Query("api_key") apiKey: String): Call<GifSerialList>
我想弄对了,避免了GifSerialList的怪诞,我应该使用TypeAdapterFactory创建与原始POKO匹配的json:
data class Gif(var id: String,
var title: String,
@SerializedName("display_name") var authorDisplayName: String?,
@SerializedName("import_datetime") var importDateTime: String,
var url: String) : Parcelable
问题:
TypeAdapterFactory-在这里读(输入:JsonReader)是正确的方法吗?
我应该使用哪种TypeAdapterFactory改造请求?
fun getTrending(@Query("api_key") apiKey: String): Call<List<Gif>>
fun getTrending(@Query("api_key") apiKey: String): Call<Gif>
fun getTrending(@Query("api_key") apiKey: String): Call<GifSerialList>
关于将json read()函数内容放在一起的任何建议吗? 到目前为止,无论我尝试什么,我都会得到典型的BEGIN_ARRAY或BEGIN_OBJECT异常。 我不完整的TypeAdapterFactory read()函数如下:
override fun read(input: JsonReader): T {
var jsonElement = elementAdapter.read(input)
var jsonObject = jsonElement.asJsonObject
val jsonArray = jsonObject.getAsJsonArray("data")
for (item in jsonArray) {
Log.d(TAG, "item: $item")
jsonObject = item.asJsonObject
}
jsonElement = jsonObject
return delegate.fromJsonTree(jsonElement)
}
如何选择所需的json Gif POKO元素并将它们一起返回?我是否需要在此处创建json元素列表,然后返回?