2015-12-08 51 views
1

我有以下带有base64图像内容的JSON字符串。你能帮助我,我怎么能张贴此JSON作为多部分:Android使用POST方法向服务器传递JSON数据

{ 
    "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食谱](https://github.com/square/okhttp/wiki/Recipes)。它拥有你所需要的一切。 –

+0

确实。将json作为多部分发送是没有意义的。 – greenapps

+0

@Ravi,你有没有试过下面的答案,它工作吗? – Hits

回答

1

一个简单的方法来做到这一点,首先将你的要求JSON转换成简单的地图就像

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

对于“了LineItem”:“ LineItems“作为键,它将json作为字符串格式进行赋值并添加到此映射中。

然后使用下面的方法调用Webservice。

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.put(“TakeoffID”,“2”);依此类推......使用此地图参考调用上述方法。 – Hits

+0

但我如何管理LineItems数组? – Philliphe

相关问题