Очень простой способ обработки сбоев безопасности на уровне приложения - это определить абстрактный обратный вызов для вашего приложения, который позаботится о шаблоне onFailure в одном согласованном месте.Для каждого запроса на обслуживание в вашем коде вы сможете использовать обратный вызов и реализовать любую конкретную обработку.
public abstract class ServiceCallback<T> implements MethodCallback<T> {
private ServiceCallbackListener listener;
public ServiceCallback(ServiceCallbackListener serviceCallbackActions) {
this.listener = serviceCallbackActions;
}
@Override
public void onFailure(Method method, Throwable exception) {
if (method.getResponse().getStatusCode() == 403 || method.getResponse().getStatusCode() == 401) {
listener.onUnAuthorizedAccess();
} else {
onError(method, exception);
}
}
public abstract void onError(Method method, Throwable exception);
}
Теперь вы можете вызывать службу следующим образом:
service.callToServer(new ServiceCallback<ServiceResponse>(sessionListener) {
@Override
public void onSuccess(Method method, ServiceResponse response) {
Log.debug("It worked!");
}
@Override
public void onError(Method method, Throwable exception) {
Log.debug("Didn't work.. ");
}
});
Конечно, если вы хотите, чтобы обработка ошибок выполнялась только на уровне приложения, вы можете захотетьустановить onError как неабстрактный метод с пустым телом.