2014-10-16 60 views
0

我是Android新手。在這種方法中,我願意發送一個BEAccident對象以及一些字符串,但服務器拋出一個錯誤。如何通過URLConnection發送多個JSON對象?

公共字符串SendAccident(BEAccident事故,字符串username, 字符串密碼){

JSONObject jsonAccident = new JSONObject(); 
    try { 
     jsonAccident.put("HasDocuments", accident.getHasDocuments()); 
     jsonAccident.put("ChassisNumber", accident.getChassisNumber()); 
     jsonAccident.put("ContainerNumber", accident.getContainerNumber()); 
     jsonAccident.put("Description", accident.getDescription()); 
     jsonAccident.put("IdTMUser", accident.getIdTMUser()); 
     jsonAccident.put("LicensePlate", accident.getLicensePlate()); 
     jsonAccident.put("LocalDateTime", accident.getLocalDateTime()); 
    } catch (JSONException e1) { 
     return e1.getMessage(); 
    } 

    try{ 
     // Set Request parameter 
     data +="&" + URLEncoder.encode("Username", "UTF-8") + "="+username; 
     data +="&" + URLEncoder.encode("Password", "UTF-8") + "="+password; 
     data +="&" + URLEncoder.encode("LoadNumber", "UTF-8") + "="+"LN0003"; 
     data +="&" + URLEncoder.encode("Accident", "UTF-8") + "="+URLEncoder.encode(jsonAccident.toString(), "UTF-8"); 

    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    BufferedReader reader = null; 
    // Send data 
    try { 

     URL url = new URL(URL_SEND_ACCIDENT); 
     URLConnection conn = url.openConnection(); 
     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(
       conn.getOutputStream()); 

     wr.write(data); 
     wr.flush(); 

     // Get the server response 

     reader = new BufferedReader(new InputStreamReader(
       conn.getInputStream())); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while ((line = reader.readLine()) != null) { 
      // Append server response in string 
      sb.append(line + ""); 
     } 

     // Append Server Response To Content String 
     Content = sb.toString(); 
     return Content; 
    } catch (Exception ex) { 
     Error = ex.getMessage(); 
     return Error; 
    } finally { 
     try { 

      reader.close(); 
     } 

     catch (Exception ex) { 
     } 
    } 
} 

請告知,如果這是一個使用的URLConnection發送非本地對象的正確途徑。我很感激任何迴應。

+0

您就可以在服務器端的代碼? – 2014-10-16 21:58:19

+0

@NagyVilmos恐怕它不可用。我所知道的是,它在iOS中完美運行。謝謝。 – Jorge 2014-10-16 23:25:05

+0

嘗試替換您的數據+ =「&」+ URLEncoder.encode(「Accident」,「UTF-8」)+「=」+ URLEncoder.encode(jsonAccident.toString(),「UTF-8」);這行是 'data + =「&」+ URLEncoder.encode(「Accident」,「UTF-8」)+「=」+ jsonAccident.toString();' – 2014-10-17 04:28:57

回答

1

我設法使之與以下方式工作:

public String SendAccident(BEAccident accident, String username, 
     String password) { 

    JSONObject jsonAccident = new JSONObject(); 
    JSONObject parameter = new JSONObject(); 
    try { 
     jsonAccident.put("HasDocuments", accident.getHasDocuments()); 
     jsonAccident.put("ChassisNumber", accident.getChassisNumber()); 
     jsonAccident.put("ContainerNumber", accident.getContainerNumber()); 
     jsonAccident.put("Description", accident.getDescription()); 
     jsonAccident.put("IdTMUser", 1); 
     jsonAccident.put("LicensePlate", accident.getLicensePlate()); 
     jsonAccident.put("LocalDateTime", accident.getLocalDateTime()); 


     parameter.put("Username", username); 
     parameter.put("Password", password); 
     parameter.put("LoadNumber", accident.getLoadNumber()); 
     parameter.put("Accident", jsonAccident); 
    } catch (JSONException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
     return e1.getMessage(); 
    } 

    HttpClient client = new DefaultHttpClient(); 
    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout 
                      // Limit 
    HttpResponse response; 

    try { 
     HttpPost post = new HttpPost(URL_SEND_ACCIDENT); 


     StringEntity se = new StringEntity(parameter.toString()); 

     post.setHeader("Content-type", "application/json"); 


     post.setEntity(se); 


     response = client.execute(post); 
     int status = response.getStatusLine().getStatusCode(); 
     BufferedReader reader = null; 
     /* Checking response */ 
     if (response != null) { 
      InputStream in = response.getEntity().getContent(); // Get the 
                   // data in 
                   // the 
                   // entity 
      reader = new BufferedReader(new InputStreamReader(in)); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 

      // Read Server Response 
      while ((line = reader.readLine()) != null) { 
       // Append server response in string 
       sb.append(line + ""); 
      } 

      // Append Server Response To Content String 
      Content = sb.toString(); 
      return Content; 

     } 
     return "Response is null"; 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return e.getMessage(); 
    } 


} 
3

如果查詢字符串中的參數名稱與Web服務的參數名稱不匹配,則會發生這種情況。如果您可以說明您正在接收哪種服務器,將會很有幫助。

+0

是的,那是我第一次猜測。 (聯合國)幸運的是名字很好。 – Jorge 2014-10-17 02:29:34