排球StringRequest只获得200状态代码,但没有响应正文

时间:2018-07-13 11:16:29

标签: android android-volley

我有以下代码使Volley StringRequest。 似乎工作正常,并在onResponse中返回200状态代码,但这就是我得到的全部。

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

我已经看到一些帖子说我必须重写getBody而不是getParams,但是使用getParams是我可以从服务器获取200的唯一方法。

link

有人知道为什么在响应中没有返回包含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);

3 个答案:

答案 0 :(得分:1)

我知道这已经太晚了,但这是该问题在Google上的热门搜索。在您的代码中查看以下代码段:

                @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设置为(很抱歉,这是Kotlin,不是Java,但非常相似):

    responseString = String(response.data) 

答案 1 :(得分:0)

请检查以下内容:

1)使用开发人员工具对Api进行JSON响应。

2)尝试使用排球以外的其他库。

3)如果您愿意使用截击,则可以更改网络请求的依赖版本和代码格式。

答案 2 :(得分:0)

尝试使用此JSONObject jsonObject = new JSONObject(response);