Volley Not Parsing 404回应

时间:2013-08-20 21:21:44

标签: android android-volley

当从服务器返回404响应时,Volley会返回错误,即使该404响应包含基于json的错误代码也是如此。它不解析包含jason的404响应{code:resourceNotFound,msg:message_index}

有没有让Volley在404消息中处理JSon?我正在集成的服务在找不到资源时返回404。

2 个答案:

答案 0 :(得分:34)

如果你收到404响应,它应该进入你设置的任何错误监听器。您在错误侦听器中获得VolleyError对象。您可以从此对象获取网络响应,然后从响应正文获取数据。它以char数组的形式给出,因此您需要自己将其转换为其他内容。

下面的代码段是一个简单的请求,但您需要输入自己的网址。

    StringRequest request = new StringRequest( Request.Method.GET, "yourURL", new Response.Listener<String>() {
        @Override
        public void onResponse( String s ) {
            //Do whatever
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse( VolleyError volleyError ) {
            try {
                String responseBody = new String( volleyError.networkResponse.data, "utf-8" );
                JSONObject jsonObject = new JSONObject( responseBody );
            } catch ( JSONException e ) {
                //Handle a malformed json response
            } catch (UnsupportedEncodingException error){

            }
        }
    }
    );

答案 1 :(得分:2)

如果有人想要将正文/标题添加到POST调用中,请添加以下代码

@Override
public HashMap<String, String> getHeaders() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<>();
    params.put("apikey", Constants.apiKey);
    params.put("env", Constants.enviroment);
    params.put("Content-Type", "application/json");
    return params;
}

@Override
public byte[] getBody() throws AuthFailureError {
    return gson.toJson(user).getBytes();
}

用户是您可以传递给Body的对象。