2015-12-08 2 views
1

У меня есть следующая строка JSON с содержимым изображения base64. Поможете ли вы мне, как я могу отправить это JSON как многоэлементная:Android передает данные JSON с использованием метода POST на сервер

{ 
    "TakeoffID": "2", 
    "address": ",nexhex", 
    "city": "Xrk Zed", 
    "state": "AZ", 
    "date": "12/08/2015", 
    "ViewNote": "", 
    "ViewPhoto1": "base64ImageContent", 
    "ViewPhoto2": "base64ImageContent", 
    "ViewPhoto3": "base64ImageContent", 
    "TakeoffDoneBy": "Jxehx", 
    "AcctName": "Gsgve", 
    "LoginUserID": "46669", 
    "jobId": "whshs", 
    "LineItems": [ 
     { 
      "OrderLineid": "544", 
      "OrderLineTypeid": "Post Light", 
      "OrderLineQty": "2", 
      "OrderLinePhoto1": "base64ImageContent", 
      "OrderLinePhoto2": "base64ImageContent", 
      "OrderLinePhoto3": "base64ImageContent", 
      "OrderLineNotes": "", 
      "OrderLineLocation": "Post Lights" 
     } 
    ] 
} 
+0

Поскольку это кодированное изображение Base64, вы не должны просто отправить обычный запрос 'application/json'? Перейдите по [OkHttp Recipes] (https://github.com/square/okhttp/wiki/Recipes). У него есть все, что вам нужно. –

+0

Действительно. Нет смысла посылать json в виде многочастной части. – greenapps

+0

@Ravi, вы пробовали ответить ниже, и это работает? – Hits

ответ

1

Один простой способ сделать это, необходимо сначала преобразовать ваш запрос JSON в простой карте, как

Map<String, String> map = new HashMap<>(); 

Для «LineItems»: " LineItems "в качестве ключа, и он присваивает значение json в виде строкового формата и добавляет его в эту карту.

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

private JSONObject sendRequest(String urlString, Map<String, String> map, String fileKey, File file) { 
     StringBuilder strData= null; 
     JSONObject resObj = null; 
     try { 
      Log.i("Send request", urlString+"="+map); 
      URL url = new URL(urlString); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(50000); 
      conn.setConnectTimeout(50000); 
      conn.setRequestMethod("POST"); 
      conn.setUseCaches(false); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      if(map == null) 
      { 
       map = new HashMap<>(); 
      } 
      MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
      for (HashMap.Entry<String, String> entry : map.entrySet()) { 
       String k = entry.getKey(); 
       String v = entry.getValue(); 
       reqEntity.addPart(k, new StringBody(v)); 
      } 

      if(file != null && !TextUtils.isEmpty(fileKey)) 
      { 
       FileBody filebody = new FileBody(file, "image/*"); 
       reqEntity.addPart(fileKey, filebody); 
      } 

      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.addRequestProperty("Content-length", reqEntity.getContentLength() + ""); 
      conn.addRequestProperty(reqEntity.getContentType().getName(), reqEntity.getContentType().getValue()); 
      OutputStream os = conn.getOutputStream(); 
      reqEntity.writeTo(os); 
      os.close(); 
      conn.connect(); 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
       String sResponse; 
       strData = new StringBuilder(); 
       while ((sResponse = reader.readLine()) != null) { 
        strData = strData.append(sResponse); 
       } 
      } 
      if(strData != null) 
       resObj = new JSONObject(strData.toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return resObj; 
    } 
+0

Вы объясните мне, как выше метод будет работать для моей строки JSON, поскольку я поделился JSONString – Philliphe

+0

Вы можете преобразовать ваш выше json в Map как: map.put («TakeoffID», «2»); и т. д. вызывают вышеуказанный метод, используя эту ссылку на карту. – Hits

+0

Но как я могу управлять массивом LineItems? – Philliphe

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