首页 > 解决方案 > 在android中使用HttpURLConnection发送JSON post请求

问题描述

我是 Android 开发的新手,我正在尝试使用 HttpURLConnection 发送带有 JSON 正文的发布请求。使用 Postman 或 python 将成功将数据发布到其余 api,但由于某种原因,即使我没有收到错误,我也无法在 android studio 中发布 JSON 数组......服务器实际上返回 true(这应该发生) 我认为正在建立连接(我收到 200 个响应代码),但从未发布过 JSON。

有人能帮我看看帖子是否进入了api吗?将不胜感激

JSON格式

 [   {
    "timeOfEvent": "2019-01-23T02:00:56",
    "incidentId": 473,
    "description": "testing tweet #4",
    "incidentTypeId": 1,
    "source": "Twitter",
    "user": null,
    "url": null,
    "sourceId": "1087892909335199745"   } ]
public class postJsonTask extends AsyncTask<String,String,JSONObject> {

@Override
protected JSONObject doInBackground(String... params){

    Log.i("postJSONTask","Beginning of doInBackGround");
    JSONObject jsonToPost = new JSONObject();
    JSONArray jsonArrayToPost = new JSONArray();
    HttpURLConnection conn = null;

    try {
        URL url = new URL("my url goes here");
        conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(15*1000);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.connect();

        jsonToPost.put("timeOfEvent", "2019-01-21T09:10:10");
        jsonToPost.put("incidentId", 1);
        jsonToPost.put("description", "Ayman Testing data");
        jsonToPost.put("incidentTypeId", 1);
        jsonToPost.put("source", null);
        jsonToPost.put("user", null);
        jsonToPost.put("url", null);
        jsonToPost.put("sourceId", null);
        jsonArrayToPost.put(jsonToPost);

        OutputStreamWriter streamWriter = new OutputStreamWriter(conn.getOutputStream());
        Log.i("postJSONTask","Conn.getOutputStream "+ conn.getOutputStream().toString());
        Log.i("postJSONTask","Trying to post: "+ jsonArrayToPost.toString());


        streamWriter.write(jsonArrayToPost.toString());
        streamWriter.flush();
        streamWriter.close();

        StringBuilder stringBuilder = new StringBuilder();
        Log.i("postJSONTask, message",conn.getResponseMessage());
        Log.i("postJSONTask respoCode", String.valueOf(conn.getResponseCode()));

        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

            InputStreamReader streamReader = new InputStreamReader(conn.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(streamReader);
            String response = null;

            while ((response = bufferedReader.readLine()) != null) {
                stringBuilder.append(response + "\n");
            }
            bufferedReader.close();
            Log.d("postJSONTask response", stringBuilder.toString());

        } else {
            Log.e("postJSONTask error", conn.getResponseMessage());
            return null;
        }
    } catch (Exception e) {
        Log.e("postJsonTask error", e.toString());
        return null;

    }
    finally{
        conn.disconnect();
    }


    return null;
}
}

标签: androidjsonrestandroid-asynctask

解决方案


在负责设置 rest-api 的同事的帮助下,我能够指出问题出在哪里。我的 JSON 数组的参数错误,我不得不删除 IncidentId... 谢谢大家的帮助!


推荐阅读