wake-up-neo.com

Wie sendet man json Array als Post-Request in Volleyball?

Ich benutze Salve für Json-Parsen. Ich möchte einige Daten mit POST an die Serverseite senden. Ich versuche zu senden. Kann mir jetzt jemand sagen, wie ich Filterarray an den Server senden kann? 

Nachfolgend ist mein Code-Ausschnitt. Ich habe auch versucht Hashmap und Jsonobject. aber diesen Fehler bekommen.

Error : 

org.json.JSONException: Value  at Data of type Java.lang.String cannot be converted to JSONObject

Format 

{
    "typeName": "MANUFACTURER",
    "typeId": 22,
    "cityId": 308,
    "sortBy": "productname",
    "sortOrder": "desc",
    "filter":[
                {
                    "filterId":101,
                    "typeName":"CAT_ID",

                     "filterId":102,
                    "typeName":"CAT_ID"
                }
             ]
}

Für Code Check Pastie

https://Pastebin.com/u5qD8e2j

8
chris

Wenn beim Aufrufen der API Probleme auftreten, hilft dies Ihnen.

RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jobReq = new JsonObjectRequest(Request.Method.POST, url, jObject,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

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

            }
        });

queue.add(jobReq);

dabei ist jObject die JSON-Daten, die Sie an den Server senden möchten.

Die Implementierung wird für JSONArray ähnlich sein. Anstelle von JsonObjectRequest Verwenden Sie JsonArrayRequest und senden Sie jArray statt jObject.

Um ein Json-Array zu erstellen, nehmen Sie einfach ein wenig Tweak vor

JSONArray array=new JSONArray();

for(int i=0;i<filter_items.size();i++){
    JSONObject obj=new JSONObject();
    try {
        obj.put("filterId",filter_items.get(i));
        obj.put("typeName","CAT_ID");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    array.put(obj);
}

Fügen Sie schließlich json array hinzu

jsonParams.put("filter",array);

In Ihrem Fall konvertieren Sie ein Json-Array in einen String 

8
Kunu

Hoffe das hilft dir.

    //Create Main jSon object
    JSONObject jsonParams = new JSONObject();

    try {
        //Add string params
        jsonParams.put("typeName", "MANUFACTURER");
        jsonParams.put("typeId", "22");
        jsonParams.put("cityId", "308");
        jsonParams.put("sortBy", "productname");
        jsonParams.put("sortOrder", "desc");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    //Create json array for filter
    JSONArray array=new JSONArray();

    //Create json objects for two filter Ids
    JSONObject jsonParam1 =new JSONObject();
    JSONObject jsonParam2 =new JSONObject();

    try {

        jsonParam1.put("filterId","101");
        jsonParam1.put("typeName","CAT_ID");

        jsonParam2.put("filterId","102");
        jsonParam2.put("typeName","CAT_ID");
    } catch (JSONException e) {
        e.printStackTrace();
    }

    //Add the filter Id object to array
    array.put(jsonParam1);
    array.put(jsonParam2);

    //Add array to main json object
    try {
        jsonParams.put("filter",array);
    } catch (JSONException e) {
        e.printStackTrace();
    }

Weitere Informationen zum Erstellen von Json-Objekten finden Sie unter diesem Link

Android JSONObject: füge Array zur put-Methode hinzu

EDIT:

Bei mehr Daten ist es besser, Gson Converter zu verwenden

http://www.vogella.com/tutorials/JavaLibrary-Gson/article.html

Verwenden Sie dies auch zum Erstellen von Pojo-Klassen

http://www.jsonschema2pojo.org/

2
Anonymous

Hi Volley unterstützt keine JsonArray-Anfrage, um andere Bibliotheken besser nutzen zu können ...

2
Shanmugam
{
"typeName": "MANUFACTURER",
"typeId": 22,
"cityId": 308,
"sortBy": "productname",
"sortOrder": "desc",
"filter":[
            {
                "filterId":101,
                "typeName":"CAT_ID",
             }
             {
                 "filterId":102,
                "typeName":"CAT_ID"
            }
         ]
}


JSONObject object=new JSONObject();
object.put("typeName","");
object.put("typeId","");
object.put("cityId","");
object.put("sortBy","");
object.put("sortOrder","");
JSONArray array=new JSONArray();
JSONObject obj=new JSONObject();
obj.put("filterId","");
obj.put("typeName","");
array.put(obj);
object.put("filter",obj.toString());

Übergeben Sie JSONObject, um eine Anfrage zu stellen. Verwenden Sie diese https://www.androidhive.info/2014/09/Android-json-parsing-using-volley/

2

Ich habe den folgenden Code verwendet, um JSONArray im Volleyball zu posten. Sie müssen JsonArrayRequest verwenden und das JSON-Array direkt übergeben, ohne es zu einem JSONObject hinzuzufügen .. Außerdem sollten Sie die "parseNetworkResponse" -Methode überschreiben, um die Antwort erneut in JSONArray zu konvertieren, da The ResponseListner für JsonArrayRequest eine Art JSONArray erwartet 

    String URL = "www.myposturl.com/data";

    RequestQueue queue = Volley.newRequestQueue(this);

    //Create json array for filter
    JSONArray array = new JSONArray();

    //Create json objects for two filter Ids
    JSONObject jsonParam = new JSONObject();
    JSONObject jsonParam1 = new JSONObject();

    try {
        //Add string params
        jsonParam.put("NAME", "XXXXXXXXXXXXXX");
        jsonParam.put("USERNAME", "XXXXXXXXXXXXXX");
        jsonParam.put("PASSWORD", "XXXXXXXXXXXX");
        jsonParam1.put("NAME", "XXXXXXXXXXXXXX");
        jsonParam1.put("USERNAME", "XXXXXXXXXXXXXX");
        jsonParam1.put("PASSWORD", "XXXXXXXXXXXX");
    } catch (JSONException e) {
        e.printStackTrace();
    }

    array.put(jsonParam);
    array.put(jsonParam1);
    JsonArrayRequest request_json = new JsonArrayRequest(Request.Method.POST, URL, array,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    //Get Final response
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            VolleyLog.e("Error: ", volleyError.getMessage());

        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<String, String>();
            // Add headers
            return headers;
        }
        //Important part to convert response to JSON Array Again
        @Override
        protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
            String responseString;
            JSONArray array = new JSONArray();
            if (response != null) {

                try {
                    responseString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                    JSONObject obj = new JSONObject(responseString);
                    (array).put(obj);
                } catch (Exception ex) {
                }
            }
            //return array;
            return Response.success(array, HttpHeaderParser.parseCacheHeaders(response));
        }
    };
    queue.add(request_json);
1
Neuron