Я вызываю 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 Retrofit – анализ JsonObejct и Array из одного и того же вызова API ⇐ Android
Форум для тех, кто программирует под Android
1736929008
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
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/75716368/android-retrofit-parsing-jsonobejct-and-array-from-same-api-call[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия