我正在使用 Retrofit 在 Android 中使用 API。成功响应看起来与错误/失败响应不同。我怎样才能做到这一点?
我目前有这方面的影响:
Call<AuthenticateUserResponse> authenticateUser(String id);
请您参考如下方法:
您可以使用基本 Response 扩展您的 Response 并检查是否有错误或成功。下面是一个基本响应 bean 示例:
public class BaseResponse {
@SerializedName("ResponseCode")
private int code;
@SerializedName("ResponseMessage")
private String message;
@SerializedName("ResponseText")
private String text;
}
我的 api 在每个响应器中返回 ResponseCode
、ResponseMessage
和 ResponseText
,我从 BaseResponse bean 扩展我的响应并检查是否有错误。
您可以将您的响应修改为您的 api 的返回方案。
编辑:这是您对 API 的回复:
public class Error {
@SerializedName("ResponseCode")
private int code;
@SerializedName("ResponseMessage")
private String message;
@SerializedName("ResponseText")
private String text;
}
public class YourWrapperResponse {
@SerializedName("Error")
private Error error;
@SerializedName("AuthenticateUserResponse")
private AuthenticateUserResponse authenticateUserResponse;
}
你的电话会是这样的:
Call<YourWrapperResponse> authenticateUser(String id);
上面我给你的例子是处理你在每次成功响应中遇到的业务错误的例子。 成功意味着 Http Status 200。您也不需要在每次响应中都返回此错误对象
。 如果有错误,您可以在回复中返回。
在 Retrofit 2.0+ 你需要检查你的请求是否成功。下面是一个关于它的例子:
Call<User> auth = YourApiProvider.getInstance().getServices().auth(userName, passowrd, grantType);
auth.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
// Here you get a 200 from your server.
}
} else {
// Here you get an authentication error.
// You can get error with response.code();
// You can get your error with response.errorBody();
// or you can get raw response with response.raw()
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// Here you get error such as TimeOut etc.
}
});
希望对您有所帮助。祝你好运!
编辑:您还可以使用泛型来处理基本的 api 响应。这是我的另一个 answer关于处理通用 api 响应。