【发布时间】:2014-12-28 14:14:19
【问题描述】:
我将我的 Retrofit 代码封装在一个类中,如下所示。如果从我发布的代码中不清楚,它正在与带有 OAuth 的宁静服务进行交互。
什么是进行错误处理的好方法? REST 服务器以 json 格式返回错误消息。我想通过从我的班级抛出一些异常来对该消息采取行动。我正在尝试做类似下面的事情。但这是好的设计吗?混合回调和异常抛出一个好主意吗?有没有更好的办法?
通过下面的方法,我可以从我的自定义异常中获取 i18l 消息并将它们敬酒给用户。
public class RestClient implements IRestClient {
private IRestAPI api;
/**
*
* @param accessToken
*/
public RestClient(final String accessToken)
{
RequestInterceptor requestInterceptor = new RequestInterceptor()
{
@Override
public void intercept(RequestFacade request) {
request.addHeader("Authorization", "Bearer " + accessToken);
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Config.ENDPOINT)
.setRequestInterceptor(requestInterceptor)
.build();
api = restAdapter.create(IRestAPI.class);
}
@Override
public void requestSomething(final Callback callback) {
api.getSomething(new Callback<Something>() {
@Override
public void success(Something something, Response response) {
callback.success(something, response);
}
@Override
public void failure(RetrofitError error) {
if(error.getMessage().getId().euqals(ACCESS_TOKEN_EXPIRED))
{
throw new AccessTokenExpired();
}
else if(error.getMessage().getId().euqals(USER_NOT_FOUND))
{
throw new UsernamePasswordNotFound();
}
else // something else happened...
{
throw error;
}
}
});
}
@Override
public void deleteSomething(final Callback callback) {
api.deleteSomething(new Callback<Something>() {
@Override
public void success(Something something, Response response) {
callback.success(something, response);
}
@Override
public void failure(RetrofitError error) {
if(error.getMessage().getId().euqals(SOMETHING_NOT_FOUND))
{
...
...
Different exceptions
}
...
}
});
}
}
当然,我必须创建自己的回调接口,只有一个成功方法。
【问题讨论】:
-
你总是可以在 RestAdapter 构建器中使用 Retrofit 的 ErrorHandler。 square.github.io/retrofit/javadoc/retrofit/ErrorHandler.html
标签: java android error-handling retrofit