我试图将一个看起来像这样的json对象发送到我的服务器{' name':joe}, 目前我的代码看起来像这样。然而,我在我的服务器上的json看起来像{' {" name":joe}':''' }。所以我的问题是如何发送json,所以当我在服务器上收到它时,它看起来像{' name':joe}?我的服务器正在使用nodejs。我想通过request.body.name获取该名称。任何帮助将不胜感激
protected Boolean doInBackground(Void... params) {
try {
URL url = new URL("http://10.0.2.2:3000/users/user");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
String jsonString = "{\"name\":" + this.mName + "}";
OutputStream os = conn.getOutputStream();
os.write(jsonString.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
StringBuilder response = new StringBuilder();
while ((output = br.readLine()) != null) {
response.append(output);
response.append('\r');
}
mes = response.toString();
conn.disconnect();
if (mes!=null && !mes.isEmpty()){
return true;
}else {
return false;
}
}catch (Exception e) {
e.printStackTrace();
}
return false;
}
编辑:将application / x-www-form-urlencoded更改为application / json之后。我一直收到FileNorFoundException,服务器返回响应代码400
答案 0 :(得分:0)
SanuoXeu在您的代码中更改此行将起作用
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
答案 1 :(得分:0)
试试这个:
protected Boolean doInBackground(Void... params) {
try {
URL url = new URL("http://10.0.2.2:3000/users/user");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
JSONObject jsonParam = new JSONObject();
jsonParam.put("name",this.mName);
os.write(jsonParam.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
StringBuilder response = new StringBuilder();
while ((output = br.readLine()) != null) {
response.append(output);
response.append('\r');
}
mes = response.toString();
conn.disconnect();
if (mes!=null && !mes.isEmpty()){
return true;
}else {
return false;
}
}catch (Exception e) {
e.printStackTrace();
}
return false;
}
答案 2 :(得分:0)
希望你做得很好。
如果您愿意通过连接字符串将数据作为JSON发送,那将会很难。
private String makeJson(String name) {
JSONObject json = new JSONObject();
try {
json.put("name", name);
} catch (JSONException e) {
e.printStackTrace();
}
return json.toString();
}
然后改变这一行:
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
答案 3 :(得分:0)
可能会有所帮助......
protected Boolean doInBackground(Void... params) {
try {
URL url = new URL("http://10.0.2.2:3000/users/user");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
/***************** add this code **********************/
JSONObject ap = new JSONObject();
ap.put("name","Joe");
OutputStreamWriter ap_osw= new OutputStreamWriter(conn.getOutputStream());
ap_osw.write(ap.toString());
ap_osw.flush();
ap_osw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
StringBuilder response = new StringBuilder();
while ((output = br.readLine()) != null) {
response.append(output);
response.append('\r');
}
mes = response.toString();
conn.disconnect();
if (mes!=null && !mes.isEmpty()){
return true;
}else {
return false;
}
}catch (Exception e) {
e.printStackTrace();
}
return false;
}