Android Retrofit – анализ JsonObejct и Array из одного и того же вызова APIAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Retrofit – анализ JsonObejct и Array из одного и того же вызова API

Сообщение Anonymous »

Я вызываю API, который может предоставить ответ иногда как JsonObejct, но иногда как JsonArray. Есть ли способ подготовить модернизацию для такой ситуации? И для списка он возвращает список, а для объекта Json он возвращает простой объект?
Спасибо
Интерфейс подготовлен для массива
interface ModelsApiInterface {
@POST("/api/v4/dreambooth/model_list")
fun sendReq(@Body requestModel: ModelsRequestModel) : Call
}

Позвонить
val modelsRequestModel = ModelsRequestModel(
API_KEY
)
val modelsResponse = ModelsServiceBuilder.buildService(ModelsApiInterface::class.java)
modelsResponse.sendReq(modelsRequestModel).enqueue(
object : Callback {
override fun onResponse(calll: Call, response: Response) {
if (response.body()?.isNotEmpty()!!) {
val modelsList = mutableListOf()
for (model in response.body()!!) {
modelsList.add(model)
}
createCarousel(modelsList)
generateViewModel.updateModelsData(modelsList)
}else if (response.body()?.get(0)?.status=="error"){
Toast.makeText(activity, "Error-Models\n${response.body()!!.get(0).message}", Toast.LENGTH_LONG).show()
}
}
override fun onFailure(calll: Call, t: Throwable) {
Log.e("log", "failure-Models")
Toast.makeText(activity, "failure-Models", Toast.LENGTH_LONG).show()

}
}
)

Мой собственный десериализатор
private class MyResponseDeserializer : JsonDeserializer {
@Throws(JsonParseException::class)
override fun deserialize(json: JsonElement, typeOfT: Type?, context: JsonDeserializationContext
): ModelsResponseModel {
var response = ModelsResponseModel(null,null,null,null,null,null,null,null)
var list= mutableListOf()
if (json.isJsonObject) {
var model_id:String = json.asJsonObject.get("model_id").asString
var model_name:String = json.asJsonObject.get("model_name").asString
var screenshots:String = json.asJsonObject.get("screenshots").asString
var status = json.asJsonObject.get("status").asString

response.status=status
response.model_id=model_id
response.model_name=model_name
response.screenshots=screenshots
return response
}else if (json.isJsonArray){
var model_id:String
var model_name:String
var screenshots:String

for (item in json.asJsonArray){
model_id= item.asJsonObject.get("model_id").asString
model_name= item.asJsonObject.get("model_name").asString
screenshots= item.asJsonObject.get("screenshots").asString
list.add(ModelsResponseModel(null,null,null,model_id,model_name,screenshots,null,null))
}
return response
}
return response
}
}


Подробнее здесь: https://stackoverflow.com/questions/757 ... e-api-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»