After researches i still cant send a JSON POST request to a server.
I already tried some older answers:
Java - sending HTTP parameters via POST method easily
[Android]-POST Json with HttpUrlConnection
Post request for registering user data on server by HttpUrlConnection
Sending json object via http post method in android
How to send a JSON object over Request with Android?
My current code is:
FloatingActionButton btn_sendMsg = (FloatingActionButton) findViewById(R.id.btn_sendMsg);
btn_sendMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*Snackbar.make(view, "Sendevorgang...", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();*/
createMsg();
}
});
private void createMsg() {
Message message = new Message(txtbox_msg.getText().toString(), "testUser");
AsyncT asyncT = new AsyncT();
asyncT.execute(message);
}
AsyncT.java :
@Override
protected Message doInBackground(Message... params) {
try {
URL url = new URL("http://[ip]:[port]"); //in the real code, there is an ip and a port
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept","application/json");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.connect();
JSONObject jsonParam = new JSONObject();
jsonParam.put("uname", params[0].getUser());
jsonParam.put("message", params[0].getMessage());
jsonParam.put("latitude", "0");
jsonParam.put("longitude", "0");
jsonParam.put("id", "1");
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
os.writeBytes(URLEncoder.encode(jsonParam.toString(), "UTF-8"));
os.flush();
os.close();
Log.i("STATUS", String.valueOf(conn.getResponseCode()));
Log.i("MSG" , conn.getResponseMessage());
conn.disconnect();
} catch (Exception e) {
}
return null;
}
I'm getting the error code networkonmainthreadexception 500
How can i solve this?
To post JSON to a REST API endpoint, you must send an HTTP POST request to the REST API server and provide JSON data in the body of the POST message. You also need to specify the data type in the body of the POST message using the Content-Type: application/json request header.
build(); Request request = new Request. Builder() . url("https://yourdomain.org/callback.php") // The URL to send the data to .
In Postman, change the method next to the URL to 'POST', and under the 'Body' tab choose the 'raw' radio button and then 'JSON (application/json)' from the drop down. You can now type in the JSON you want to send along with the POST request. If this is successful, you should see the new data in your 'db. json' file.
Solved:
changed
os.writeBytes(URLEncoder.encode(jsonParam.toString(), "UTF-8"));
to
os.writeBytes(jsonParam.toString());
And put the code in a thread (thanks to @Ravi Sanker)
Working code:
public void sendPost() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(urlAdress);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
conn.setRequestProperty("Accept","application/json");
conn.setDoOutput(true);
conn.setDoInput(true);
JSONObject jsonParam = new JSONObject();
jsonParam.put("timestamp", 1488873360);
jsonParam.put("uname", message.getUser());
jsonParam.put("message", message.getMessage());
jsonParam.put("latitude", 0D);
jsonParam.put("longitude", 0D);
Log.i("JSON", jsonParam.toString());
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
//os.writeBytes(URLEncoder.encode(jsonParam.toString(), "UTF-8"));
os.writeBytes(jsonParam.toString());
os.flush();
os.close();
Log.i("STATUS", String.valueOf(conn.getResponseCode()));
Log.i("MSG" , conn.getResponseMessage());
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With