2017-02-22 12 views
1

im пытается отправить объект json, который похож на мой сервер {'name': joe}, , и в настоящее время мой код выглядит так. Однако json, который я получаю на моем сервере, выглядит следующим образом {'{"name": joe}': ''}. поэтому мой вопрос в том, как отправить json, так что это будет выглядеть как {'name': joe}, когда я получу его на своем сервере? мой сервер использует nodejs. Я хочу получить это имя request.body.name. любая помощь будет оцененаотправка объекта JSON с Android на HttpURLConnection POST-запрос

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; 
    } 

EDIT: после изменения приложения/х-WWW-форм-urlencoded к применению/JSON. я постоянно получаю FileNorFoundException, и сервер возвращает код ответа 400

+0

Строка jsonString = "{\" Имя \ ":" + this.mName + "}"; попробуйте изменить это с помощью чего-то String jsonString = "'name \':" + this.mName "; –

ответ

0

SanuoXeu изменить эту строку в коде будет работать

conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
+0

при смене приложения/json на application/x-www-form-urlencoded. Я продолжаю получать FileNotFoundException – SanuoXeu

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; 
     } 
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"); 
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; 
    }