2017-02-22 89 views
1

IM試圖發送一個JSON對象,看起來像這樣我的服務器{「名」:喬}, ,目前我的代碼看起來是這樣的。然而,我在我的服務器上得到的json看起來像這樣{'{「name」:joe}':''}。所以我的問題是我如何發送json,所以當我在我的服務器上收到它時,它看起來像{'name':joe}?我的服務器正在使用nodejs。我想通過request.body.name來獲取該名稱。任何幫助,將理解從Android的發送JSON對象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; 
    } 

編輯:改變應用/後的X WWW窗體-urlencoded爲application/JSON。我不斷收到FileNorFoundException,和服務器返回響應代碼400

+0

字符串jsonString = 「{\」 名稱\ 「:」 + this.mName +「}」;嘗試用一些字符串jsonString =改變這種「‘名\’」 + this.mName「 –

回答

0

SanuoXeu改變你這行代碼,將工作

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

不斷變化的應用/ JSON到應用程序/ x-WWW窗體-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; 
    } 
相關問題