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

标签 android json android-volley

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

在我的例子中,如果我发送正确的值,它会返回正确的 json 对象,但如果我向服务器发送错误的输入,它会返回 401 作为请求 header 和带有错误消息的响应主体。但这并没有显示在 onResponse 成功方法中。

这是我的代码

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);
}

My need is to get the json response in public void onResponse(JSONObject response) { method }.

Can anyone help me to overcome this problem?

最佳答案

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

关于android - 如何在 volley 库 Android 中读取响应头的状态码和响应体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364125/

相关文章:

android - 以编程方式获取强调色(从模块)

android - removeExpiredCookie() 不起作用

javascript - Angular.js 点击 json 数据数组?

java - SimpleDateFormat 将 UTC 时间转换为澳大利亚时区时增加 1 小时

c# - 如何将伪json数组反序列化为c#

php - 如何修复 "Uncaught SyntaxError: Unexpected token _ in JSON at position . . . "

android - 使用 Volley 在谷歌地图 v2 上添加多个标记

android - 我如何在 Volley 库中获取 Inputstream 作为响应

android - Android Volley 中的 JsonRequest VS StringRequest

java - 为 SQLite Android 创建一个有用且可扩展的类