如何从Volley中的JSONObject获取String响应

dev*_*v90 5 android httprequest android-layout android-volley android-json

我已经使用volley创建了JSONRequest,它成功点击了服务,我检查了服务端,它接收了数据,然后发送"Success"作为回报.

问题在于,服务String在输出中返回,而Volley JSON Data在输出中除外.所以它执行onErrorMethod而不是onResponse.

请指导我如何使其接受字符串响应,或者在您JSONObject作为请求使用时不可能.

    Request<JSONObject> jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, "http://192.168.0.101:8888/api/services/mytest",
            jsonParent, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d("Success", response.toString());
            deleteFile();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("Error", error.toString());
            deleteFile();
        }

    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
    requestQueue.add(jsonObjectRequest);
Run Code Online (Sandbox Code Playgroud)

Nay*_*ava 11

您可以使用StringRequest而不是JSONRequest.

StringRequest stringRequest = new StringRequest(methodType, url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {

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

                }
            }){
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return headers == null ? super.getHeaders() : headers;
                }

                @Override
                public byte[] getBody() throws AuthFailureError {
                    return "Your JSON body".toString().getBytes();
                }
            };
Run Code Online (Sandbox Code Playgroud)

getheaders方法是添加自定义标头,如果您想要和getBody提供request body.


Meg*_*ron 6

对于那些仍然需要发送原始 Json 并接收字符串作为响应的人:

默认情况下,主体由application/x-www-form-urlencoded; charset=UTF-8格式为 的请求参数组成StringRequest。当重写 时getBody(),正如 Nayan 正确建议的那样,请考虑重写getBodyContentType()以匹配新的正文格式。对于 Json 来说应该是 application/json.

String url = "www.google.com";

HashMap<String, Object> params = new HashMap<>();
params.put("key1", "Android");
params.put("isCool", true);

StringRequest request = new StringRequest(Request.Method.POST, url, 
        new Response.Listener<String>() {
            public void onResponse(String response) {

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

            }
        }
    ) {
        public byte[] getBody() {
            return new JSONObject(params).toString().getBytes();
        }
        public String getBodyContentType() {
            return "application/json";
        }
    };

Volley.newRequestQueue(this).add(request);
Run Code Online (Sandbox Code Playgroud)