다음과 같은 클래스에서 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
}
...
}
});
}
}
당연히 나는 성공 메소드로 내 자신 만의 콜백 인터페이스를 만들어야 할 것입니다.
RestAdfit Builder에서 항상 Retrofit의 ErrorHandler를 사용할 수 있습니다. http://square.github.io/retrofit/javadoc/retrofit/ErrorHandler.html – daentech