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

Форум для тех, кто программирует под 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

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