首页 > 解决方案 > Volley StringRequest 仅获得 200 状态码但没有响应正文

问题描述

我有以下代码可以生成 Volley StringRequest。它似乎工作正常并在 onResponse 中返回 200 个状态代码,但这就是我所得到的。

我期待一个包含一些令牌的 JSON 的字符串表示。

我看过一些帖子说我必须覆盖 getBody 而不是 getParams,但使用 getParams 是我可以从服务器获得 200 的唯一方法。

关联

有没有人知道为什么包含 JSON 的字符串没有在响应中发回?

来自服务器的响应:

E/WebServicesForWebApi: 200

.

StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.e(TAG, response);


                        iResult.notifySuccess(null, response);







                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e(TAG, error.toString());

                        iResult.notifyError(error);


                    }
                }) {
                    @Override
                    public String getBodyContentType() {
                        return "application/x-www-form-urlencoded";
                    }

                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("client_id", "HKTPEMS");
                        params.put("client_secret", "B83845-9AFDDD-46D");
                        params.put("grant_type", "password");
                        params.put("username", "testuserrandomQWQ2Matty@care.com");
                        params.put("password", "testpasssword");
                        return params;
                    }






                    @Override
                    protected Response<String> parseNetworkResponse(NetworkResponse response) {
                        String responseString = "";
                        if (response != null) {
                            responseString = String.valueOf(response.statusCode);
                            // can get more details such as response.headers
                        }
                        return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
                    }
                };


                RequestQueue queue = appObj.getRequestQueue();
                queue.add(stringRequest);

标签: androidandroid-volley

解决方案


我知道这已经很晚了,但这是谷歌在这个问题上的热门话题。从您的代码中查看此块:

@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
    String responseString = "";
    if (response != null) {
        responseString = String.valueOf(response.statusCode);
        // can get more details such as response.headers
    }
    return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
}

responseString是什么将被输入onResponse()

要获取响应的正文responseString,请设置为:

responseString = new String(response.data, StandardCharsets.UTF_8);

推荐阅读