Я использую tmdb, чтобы получить подробности для телешоу. У него есть конечная точка, которая выглядит следующим образом: https://api.themoviedb.org/3/tv/1399?api_key=API_KEY&append_to_response=season/1,season/2,season/3,season/4,season/5,season/6, сезон /7, сезон /8 Здесь в приложении к ответу указываются номера сезонов для предоставления деталей этого сезона в том же запросе. Это был пример для телешоу с 8 сезонами. Если он имеет, скажем, 2 сезона, то конечной точкой будет https://api.themoviedb.org/3/tv/1399?api_key=API_KEY&append_to_response=season/1,season/2
Теперь при создании класса модели для обработки этого запроса проблема заключается в том, что времена года возвращаются сами как объекты, а не как массив. Так что может быть много сезонов.
{
"id": ...,
...,
...,
"season/1": {...},
"season/2": {...},
"season/3": {...}
}
Каждому из этих сезонов нужен новый класс моделей для себя, и число объектов также является переменным. Как мне справиться с этим?
Самое простое решение для этого - просто определить ваш ответ типа ResponseBody
который выглядит следующим образом:
@GET(value = "/{yourFirstNumber}/tv/{yourSecondNumber}")
Call<ResponseBody> getStuff(@Path("yourFirstNumber") String whateverYouWantToNameThis1,
@Path("yourSecondNumber") String whateverYouWantToNameThis2,
@Query("api_key") String apiKey,
@Query("append_to_response") String appendToResponse);
Просто убедитесь, что вы называете эти числовые переменные тем, чем они являются, вместо того, чтобы использовать фразу, которую я использовал, поскольку я не знаком с API.
При этом ваш запрос вызова будет выглядеть так:
Call<ResponseBody> call = yourService.getStuff(yourObject);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
L.m("RESPONSE CODE == " + response.code());
if(response.isSuccessful()){
ResponseBody successResponse = response.body();
//This means it was successful (IE a 200)
} else {
ResponseBody errorResponse = response.errorBody();
//This means there was an error (IE a 402)
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
//Handle your error here
}
});
Оттуда вы можете анализировать ваш successResponse
несколькими различными способами.
Например, я использую GSON и несколько других методов в этом классе, но это действительно зависит от того, как вы хотите его проанализировать. Если вы хотите преобразовать его в строку, используйте successResponse.string()
(не опечатку, обязательно используйте метод string(), а не toString()) и преобразуйте его из сериализованного ответа в тот, который вы можете легко использовать.