当前位置: 首页 > 知识库问答 >
问题:

如何读取volley库中响应头的状态码和响应体

徐晔
2023-03-14

我正在使用volley库用于Android中的网络调用,并使用jsonObject用于从服务器发送和获取值。

在我的例子中,如果我发送了正确的值,它将返回正确的json对象,但是如果我向服务器发送了错误的输入,它将返回401作为带有错误消息的请求头和响应体。但在onResponse success方法中没有显示这一点。

private void makeLoginReq() {
    showProgressDialog();
    Map<String, String> postParam = new HashMap<String, String>();
    postParam.put("un", user_name.getText().toString());
    postParam.put("p", password.getText().toString());

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            Server.URL+Server.FUNC_LOGIN, new JSONObject(postParam),
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.d("TAG", response.toString());
                    hideProgressDialog();
                    try {
                        if("0".equalsIgnoreCase(response.getString("status")))
                        {
                            startActivity(new Intent(ActivityLogin.this,ActivityHome.class));
                        }else if("1".equalsIgnoreCase(response.getString("status")))
                        {

                        }
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("TAG", "Error: " + error.networkResponse.statusCode);
                    hideProgressDialog();
                    Crouton.makeText(ActivityLogin.this, "Server Error Try again", Style.ALERT).show();
                }
            }) {

        /**
         * Passing some request headers
         * */
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            headers.put("charset", "utf-8");
            return headers;
        }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}

有谁能帮我克服这个问题吗?

共有1个答案

闾丘树
2023-03-14

VolleyError有很多子类,可以通过instanceOf checking来检查错误类型。

 类似资料:
  • 我是Spring Reactive framework的新手&正在尝试将SpringBoot1.5.x代码转换为SpringBoot2.0。我需要从Spring5WebClient ClientResponse返回一些过滤后的响应头、主体和状态代码。我不想使用block()方法,因为它会将其转换为同步调用。我可以很容易地使用BodyTomono获得responsebody。此外,如果我只是返回Cl

  • 我尝试对http请求使用volley。我在postman上尝试了一个请求,响应标题如下: null 为什么它会改变内容?如何获取和?

  • 问题内容: 我正在使用RestTemplate.postForObject将信息发布到Web服务。除了结果字符串,我还需要响应头中的信息。有什么办法可以做到这一点? 问题答案: 好吧,我终于明白了。交换方法正是我所需要的。它返回包含完整标头的HttpEntity。

  • 我收到了以下回复:HTTP/1.1 200确定日期:2016年4月11日星期一10:36:10 GMT内容处置:附件;filename=结果。xml;x-xss-防护:1;mode=access Keep Alive:timeout=5,max=100我想从头文件中读取文件名,如何使用正则表达式捕获这个值?

  • 问题内容: 调用JAX-WS端点时,如何获取HTTP响应代码? 在下面的示例代码中,在调用Web服务时可能会引发Exception,例如或。 在这种情况下,如何从HTTP响应中获取HTTP状态代码? 问题答案: 完成@Praveen答案后,您必须将变成原始值,然后从上下文中获取值。 如果您在托管的Web服务客户端中发生异常,请不要忘记将事务标记为回滚。

  • 我希望检索HTTP响应状态代码(例如,400、401、403、503等),以防请求失败(理想情况下也是成功)。在这段代码中,我使用HTTP Basic执行用户身份验证,并希望能够在用户错误键入密码时向用户发送身份验证失败的消息。 不幸的是,产生的错误似乎并不表示实际收到了HTTP状态代码409: 此外,在发生错误时检索HTTP正文会很好,因为我的服务器端将在那里放置错误的文本描述。 问题 是否可以