Capture a resposta http no Retrofit antes de passá-la para a atividade de chamada
No momento, estamos usando o retrofit assim:
service.executeSomeRequest(UserPreferenceRequest userPreferenceRequest, new Callback<UserPreferenceResponse>() {
@Override
public void success(UserPreferenceResponse responseCallback, Response response) {
if (responseCallback.getStatus() == ResponseStatus.OK) {
// Everything is OK, process response
} else {
ApiErrorProcessor.process(responseCallback.getError());
}
}
@Override
public void failure(RetrofitError retrofitError) {
ServerErrorProcessor.process(retrofitError);
}
});
Mas temos muitas solicitações e, praticamente, todas as solicitações que implementamos exigem que escrevamos o mesmo tratamento de código de erro (para erros de API e de servidor) que duplica o código.
O que queremos é substituir apenas os métodos de interesse e, se nenhuma implementação for fornecida, uma implementação padrão a ser executada.
Algo assim:
service.executeSomeRequest(UserPreferenceRequest userPreferenceRequest, new
CustomCallback<UserPreferenceResponse>() {
@Override
public void success(UserPreferenceResponse responseCallback, Response response) {
super.success(responseCallback, response);
// Everything is OK, process response
}
});
oCustomCallback
cuidará dos erros de API e do servidor e, se estiver tudo bem, só então passará o resultado para a atividade de chamada.
Ao construir oRestAdapter
Há simsetRequestInterceptor();
que me permite capturar a solicitação antes de emiti-la, eu estava pensando em algo semelhante, comosetResponseInterceptor()
, isso permitirá que eu pegue a resposta antes de passá-la para a atividade e trate erros genéricos, mas não encontrei algo semelhante.