Мне удалось получить модификацию, работающую со следующим 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 для создания json, соответствующего моему оригинальному POKO:
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 ниже:
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)
}
Как выбрать требуемые элементы POX json Gif и вернуть их вместе?Нужно ли мне создавать список элементов json здесь и затем возвращать?