Как получить код ответа из синхронного запроса RequestFuture
Я использую API-интерфейс strava для приложения. Я делаю синхронные запросы, как видно из кода ниже.
try {
RequestQueue queue = Volley.newRequestQueue(context);
RequestFuture<String> future = RequestFuture.newFuture();
StringRequest request = new StringRequest(Request.Method.GET, urlRequest, future, future);
queue.add(request);
dataResponse = dealWithResponse(future.get());
} catch (ExecutionException e) {
System.err.println(e.getLocalizedMessage());
System.err.println(e.getMessage());
System.err.println(e.toString());
} catch (java.lang.Exception e) {
e.printStackTrace();
}
Я хочу знать, как я могу получить код ответа в случае ошибки? например некоторые поездки, которые я запрашиваю, были удалены / являются частными, и я получаю код ошибки 404. В других случаях у меня заканчивались запросы API и я получал код 403. Как я могу различить выброшенные ошибки.
Большое спасибо за Вашу помощь!
1 ответ
Решение
Override parseNetworkError
по вашему запросу:
StringRequest request = new StringRequest(Request.Method.GET, urlRequest, future, future) {
@Override
protected VolleyError parseNetworkError(VolleyError volleyError) {
if (volleyError != null && volloeyError.networkResponse != null) {
int statusCode = volleyError.networkResponse.statusCode;
switch (statusCode) {
case 403:
// Forbidden
break;
case 404:
// Page not found
break;
}
}
return volleyError;
}
};
В вашем предложении поймать, где вы обрабатываете ExecutionException
Вы можете добавить следующее:
if (e.getCause() instanceof ClientError) {
ClientError error = (ClientError)e.getCause();
switch (error.networkResponse.statusCode) {
//Handle error code
}
}