How to get String response from JSONObject in Volley
Asked Answered
A

2

8

I have created JSONRequest by using volley, It successfully hits the service, I checked the service end, It receives the data, and send "Success" in return.

The problem is that, Service returns String in output, and Volley excepts some JSON Data in output. So it executes the onError Method, instead of onResponse.

Kindly guide me how to make it accept string response, or is it not possible when you are using JSONObjectas request.

    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);
Arrhythmia answered 26/1, 2017 at 9:56 Comment(2)
either use string request or send string in a jsonobjectTableware
It depends what server is returning if only String use StringRequest if you getting JSON value simple use JSONObject/ArrayRequestOffshore
D
13

You can use StringRequest instead 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();
                }
            };

getheaders method is to add custom headers if you want and getBody to supply request body.

Dispense answered 26/1, 2017 at 10:4 Comment(3)
but i need to add JSON object in Body of request, and that looks possible only through JSONObject requestArrhythmia
No you can do that with this as well, let me update the answerDispense
@NayanSrivastava did update the answer. It's getBody() the one converts the JSON object a string.Val
T
6

For those who still need to send raw Json and receive a String as response:

By default, the body consists of the request parameters in application/x-www-form-urlencoded; charset=UTF-8 format for StringRequest. When overriding getBody(), as Nayan suggested correctly, consider overriding getBodyContentType() as well to match the new body format. For Json it should be 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);
Tankoos answered 2/6, 2020 at 20:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.