我使用翻新2,并且我有带有其余方法的UserService,这些方法返回对象Call。
我想调用这些方法并只返回数据对象。

我有这个:

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


但是我想要:

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


我知道在改装1.9中默认情况下是可能的,但我找不到此问题的解决方案。
我不想每次使用它时都调用方法,执行调用,获取正文并进行try..catch。

当我从第二个示例调用方法时,收到错误消息:

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


是否可以在任何适配器中处理这种情况?以及如何做呢?

最佳答案

我这样解决了这个问题:

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);
        }
    }
}

10-01 08:52