Retrofit 2 - Как сделать запрос без объекта Call - PullRequest
0 голосов
/ 10 апреля 2020

Я использую модификацию 2, и у меня есть UserService с методами отдыха, которые возвращают объекты Call. Я хотел бы вызвать эти методы и вернуть только объект данных.

У меня есть это:

@GET("users")
Call<List<UserDTO>> getUsers();

, но я хочу:

@GET("users")
List<UserDTO> getUsers();

Я знаю, что это было возможно по умолчанию в модификации 1.9, но я не смог найти решение этой проблемы. Я не хочу вызывать метод, выполнять call, get body и make try..catch каждый раз, когда я его использую.

Когда я вызываю метод из моего второго примера, я получаю сообщение об ошибке:

Could not locate call adapter for java.util.List<>

Возможно ли справиться с этим делом в любом адаптере? И как это сделать?

1 Ответ

0 голосов
/ 10 апреля 2020

Я решил эту проблему так:

public class CustomCallAdapter<T> implements CallAdapter<T, T> {

    private Type returnType;

    public CustomCallAdapter(Type returnType) {
        this.returnType = returnType;
    }

    @Override
    public Type responseType() {
        return returnType;
    }

    @Override
    public T adapt(Call<T> call) {
        try {
            return call.execute().body();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static class Factory extends CallAdapter.Factory {

        @Override
        public CallAdapter<?, ?> get(Type returnType, Annotation[] annotations, Retrofit retrofit) {
            return new CustomCallAdapter(returnType);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...