我在下面的類中包裝了我的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。 http://square.github.io/retrofit/javadoc/retrofit/ErrorHandler.html – daentech 2014-11-01 11:28:40