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
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
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
Hi Volley unterstützt keine JsonArray-Anfrage, um andere Bibliotheken besser nutzen zu können ...
{
"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/
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);