Senden einer POST-Anforderung mit JSON Android ein node.js server

So, ich bin versucht, senden Sie einige JSON zu einem meiner node.js server durch eine POST-Anforderung von einer Android app. Der server ist gehostet auf Heroku. Ich bin mir ziemlich sicher, dass der server korrekt funktioniert, denn wenn ich Problem eine curl-Anfrage, alles funktioniert einwandfrei. Ich denke, dass der Fehler etwas mit, wie ich die Formatierung der JSON Körper in der front-end-und die back-end erwartet etwas anderes.

Dies ist mein Android-code, der die Anforderung sendet. All dies in einem AsyncTask:

HttpURLConnection urlConn = null;
        String result = "-1";
        JSONObject json = jsonParam[0];
        Log.d("postTask: JO",json.toString());
        try {
            URL url;
            DataOutputStream printout;
            String address = BASE_URL+"/users/add";
            Log.d("sendPost",address);
            url = new URL (address);
            urlConn = (HttpURLConnection) url.openConnection();
            urlConn.setDoInput (true);
            urlConn.setDoOutput (true);
            urlConn.setUseCaches (false);
            urlConn.setRequestMethod("POST");
            urlConn.setChunkedStreamingMode(100);
            urlConn.setRequestProperty("Content-Type","application/json");   
            urlConn.connect();  
            //Send POST output.
            printout = new DataOutputStream(urlConn.getOutputStream());
            String output = URLEncoder.encode(json.toString(),"UTF-8");
            Log.d("postTaskURL",output);
            printout.writeUTF(json.toString());
            printout.flush();
            result = Integer.toString(urlConn.getResponseCode());
            printout.close();
        } catch (IOException e) {
            e.printStackTrace();
        }  finally {
            if(urlConn !=null)  
                   urlConn.disconnect(); 
        }
        return result;

Hier ist der Aufruf der AsyncTask:

            postTask task = new postTask();
            JSONObject json = new JSONObject();
            json.put("username","user");
            json.put("password","life");
            task.execute(json);

Und hier ist meine node.js backend:

app.post('/users/add',function(req, res) {
console.log("MADE IT TO THIS FUNCTION");
var user = req.body.user;
var password = req.body.password;
console.log("User: " + user + "\nPassword: " + password);
var rC = model.add(user,password, function(returnCode){
    console.log("returnCode: " + returnCode.toString());
    sendJSON(res,returnCode);
});
if (rC != undefined && rC != null) {
    sendJSON(res, rC);
}
});

Das Ergebnis der Rückkehr in meine Android-app ist mit einem 400-Fehlercode - ungültige Anforderung. Und suchen bei Heroku die Protokolle, wenn ich initiieren, die die POST-Anforderung ist folgende:

Error: invalid json
2014-02-18T06:13:25.468224+00:00 app[web.1]:     at Object.exports.error  (/app/node_modules/express/node_modules/connect/lib/utils.js:60:13)
2014-02-18T06:13:25.468224+00:00 app[web.1]:     at IncomingMessage.<anonymous> (/app/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71)
2014-02-18T06:13:25.468224+00:00 app[web.1]:     at IncomingMessage.EventEmitter.emit (events.js:92:17)
2014-02-18T06:13:25.468224+00:00 app[web.1]:     at process._tickCallback (node.js:415:13)
2014-02-18T06:13:25.468224+00:00 app[web.1]:     at _stream_readable.js:920:16
2014-02-18T06:13:25.499015+00:00 heroku[router]: at=info method=POST path=/users/add host=ancient-spire-1285.herokuapp.com request_id=5d148ef8-a74b-4cd5-ae8b-67f0214ee641 fwd="76.102.205.187" dyno=web.1 connect=1ms service=310ms status=400 bytes=521

Wenn jemand eine Idee hat, warum ich diese Fehlermeldung bekommen, es würde sehr geschätzt. Ich habe verbrachte die meiste Zeit des Tages versucht zu Debuggen, und ich bin nirgends bekommen.

Dank.

Machen AsyncTask eine Unterklasse
Das habe ich getan. private class postTask extends AsyncTask<JSONObject, Void, String> {...}

InformationsquelleAutor Mahith Amancherla | 2014-02-18

Schreibe einen Kommentar