Android json code -32700 mit 4.0

Hallo,

unter IP-Symcon 4.0 habe ich ein Problem mit dem JSON Befehl aus Android heraus.

JSONObject Klasse von Android setzt den Befehl folgendermaßen um egal welche Reihenfolge ich mit json.put Befehle mitgebe:

    JSONObject json = new JSONObject();
            JSONArray jsonArray = new JSONArray();
            jsonArray.put(thiemoParameter.getIpSend());       //[50638]
            json.put("method", "GetValueString");
            json.put("params", jsonArray);
            json.put("jsonrpc", "2.0");
            json.put("id", 1);

Laut Android Debugging sieht es so aus im json Objekt:

json: "{"id":1,"jsonrpc":"2.0","method":"SetValue","params":[50638,"Außentemperatur"]}"

Dennoch erhalte ich unter 4.0 immer -32700 Parse Error als Antwort

Wenn ich über Fiddler entsprechend das ganze Teste funktioniert alles ordnungsgemäß

json_ok_2.jpg

Auch wenn ich die Reihenfolge so ändere wie es von Android kommt funktioniert es mit Fiddler. Also start mit „ID“ usw…
Nur wenn ich unter Fiddler zum Beispiel einen Beistrich oder so vergesse kommt ebenfalls -32700 als Antwort.

Gibt es irgendwo eine Möglichkeit JSON IP-Symcon seitig zu debuggen unter 4.0 um zu sehen was dort tatsächlich ankommt?
Unter IP-Symcon 3.4 funktioniert das Coding von Android ohne Probleme.

Danke
LG
Thiemo

Hast du es mal ohne Sonderzeichen probiert? (also ohne ß)

Wenn es daran liegt… Kodierst du dein JSON korrekt als UTF8? Und sendest du den Encoding Header mit?

paresy

Hallo Paresy,

ich habe mit Wireshark einen Trace mitgeschnitten. So kommt das Paket an aus Android. Siehst Du hier einen Fehler?
Ich erhalte auch mit Wert test unter 4.0 das Resultat -32700


Danke
LG
Thiemo

Ich glaube du vergisst die Content-Length im Header zu senden und dadurch weiß IPS nicht, wie lang dein JSON body ist :wink:

paresy

Hallo Paresy,

danke. Klappt jetzt.

Habe vorher das hier verwendet in Android das unter 3.4 funktionierte.

httpsUrlConnection.setChunkedStreamingMode(0); // Use default chunk size

Jetzt mache ich es so für 3.4 und 4.0

int contentLength = json.toString().getBytes().length;
httpsUrlConnection.setFixedLengthStreamingMode(contentLength);

LG
Thiemo