如何从同步RequestFuture请求获取响应代码

时间:2018-09-20 20:28:46

标签: java android error-code urlrequest request-queueing

我正在为应用程序使用strava API。正如下面的代码所示,我正在发出同步请求。

 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 :(得分:1)

在处理ExecutionException的catch子句中,可以添加以下内容:

if (e.getCause() instanceof ClientError) {
    ClientError error = (ClientError)e.getCause();
    switch (error.networkResponse.statusCode) {
        //Handle error code
    }
}

答案 1 :(得分:0)

根据您的请求覆盖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;
    }
};