我使用翻新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);
}
}
}