Несколько объектов, которые будут объявлены во время выполнения для модифицированной модели

1

Я использую 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": {...}
}

Каждому из этих сезонов нужен новый класс моделей для себя, и число объектов также является переменным. Как мне справиться с этим?

Запрос с 8 сезонов

Запрос с 3 сезона

Теги:
retrofit2
gson

1 ответ

0

Самое простое решение для этого - просто определить ваш ответ типа 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()) и преобразуйте его из сериализованного ответа в тот, который вы можете легко использовать.

  • 0
    Но проблема в том, как мне сделать модель с переменным числом объектов, которая содержит сезон / 1, сезон / 2, сезон / 3 и т. Д.? Процесс подачи запросов в порядке. Но я хочу знать, как создать модель с переменными объектами для сезонов, которых нет в массиве, как возвращает API.
  • 0
    Можете ли вы опубликовать 2 разных ответа API JSON на ваш вопрос? Я могу переформатировать ответ для соответствия, если я лучше понимаю, как должна выглядеть схема тела ответа

Ещё вопросы

Сообщество Overcoder
Наверх
Меню