Android 使用 POST 方法向服务器传递 JSON 数据

Android passing JSON data using POST method to server

我有以下带有 base64 图像内容的 JSON 字符串。你能帮我吗我怎样才能 post 这个 JSON as Multipart:

{
    "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"
        }
    ]
}

一个简单的方法是,首先将您的请求 json 转换成像

这样的简单地图
Map<String, String> map = new HashMap<>();

对于 "LineItems" : "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;
    }