发布json对象,在String Volley中等待响应

时间:2017-03-23 12:20:26

标签: android json android-volley

我一直在使用排球库来使用我的Android应用程序来消费服务。我注意到一些奇怪的东西,当我尝试将json对象发布到服务器时,我必须创建一个JSONObject类型的响应侦听器。但是我的服务器返回String,Success或failure。是否可以编写一个等待String响应的JsonObjectRequest?这就是我所写的。该服务正确运行,但由于无法将String转换为JSON,因此在成功发布后触发onErrorResponse

            JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        Toast.makeText(StartingActivity.this,response.toString(),Toast.LENGTH_SHORT).show();

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                error.printStackTrace();
                Toast.makeText(StartingActivity.this,"That didn't work",Toast.LENGTH_SHORT).show();

            }
        });


        RequestQueue queue = Volley.newRequestQueue(this);
        queue.add(jsonRequest);

2 个答案:

答案 0 :(得分:0)

您发送到服务器的jsonBody应该是String。

  JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody.toString(),

我希望这会对你有所帮助。谢谢!

答案 1 :(得分:0)

使用StringRequest而不是JsonObjectRequest。它会在字符串中返回响应像这样:

 StringRequest stringRequest = new StringRequest(Request.Method.POST,url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                                 Log.e(TAG,response); 
                           },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            }) {
        @Override
        public byte[] getBody() throws AuthFailureError {
            //use this to post data.
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            //use this for headers.
        }

    };

stringRequest.setRetryPolicy(new RetryPolicy() {
        @Override
        public int getCurrentTimeout() {
            return 50000;
        }

        @Override
        public int getCurrentRetryCount() {
            return 50000;
        }

        @Override
        public void retry(VolleyError error) throws VolleyError {

        }
    });

    RequestQueue requestQueue = Volley.newRequestQueue(context);
    requestQueue.add(stringRequest);