Retrofit 2 - 如何在没有 Call 对象的情况下发出请求
Retrofit 2 - How to make request without Call object
我使用改造 2,我有 UserService 和 return 对象调用的剩余方法。
我想调用这些方法,return 只是数据对象。
我有这个:
@GET("users")
Call<List<UserDTO>> getUsers();
但我想要:
@GET("users")
List<UserDTO> getUsers();
我知道在 Retrofit 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);
}
}
}
我使用改造 2,我有 UserService 和 return 对象调用的剩余方法。 我想调用这些方法,return 只是数据对象。
我有这个:
@GET("users")
Call<List<UserDTO>> getUsers();
但我想要:
@GET("users")
List<UserDTO> getUsers();
我知道在 Retrofit 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);
}
}
}