Как получить код ответа из синхронного запроса RequestFuture - PullRequest
0 голосов
/ 20 сентября 2018

Я использую 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. Как я могу различить выброшенные ошибки.

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

В вашем предложении catch, где вы обрабатываете ExecutionException, вы можете добавить следующее:

if (e.getCause() instanceof ClientError) {
    ClientError error = (ClientError)e.getCause();
    switch (error.networkResponse.statusCode) {
        //Handle error code
    }
}
0 голосов
/ 20 сентября 2018

Переопределить 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;
    }
};
...