2014-10-16 4 views
0

Я новичок в Android. В этом методе я готов отправить объект BEAccident вместе с некоторыми строками, но сервер выдает ошибку.Как отправить несколько объектов JSON через URLConnection?

общественности Строка SendAccident (BEAccident авария, String имя пользователя, Строка пароля) {

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

вы можете показать код на стороне сервера? –

+0

@NagyVilmos Я боюсь, что он недоступен. Все, что я знаю, это то, что он отлично работает в iOS. Благодарю. – Jorge

+0

попробуйте заменить ваши данные «+ +» и «+ URLEncoder.encode» («Несчастный случай», «UTF-8») + «=» + URLEncoder.encode (jsonAccident.toString(), «UTF-8»); эта строка с 'data + =" & "+ URLEncoder.encode (" Несчастный случай "," UTF-8 ") +" = "+ jsonAccident.toString();' –

ответ

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

Это может произойти, если имена параметров в строке запроса не совпадают с именами параметров веб-службы. было бы полезно, если бы вы могли указать, какой сервер вы получаете.

+0

Да, это было мое первое предположение. (Un), к счастью, имена хороши. – Jorge

Смежные вопросы