android - 在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;
}
}
解决方案
在负责设置 rest-api 的同事的帮助下,我能够指出问题出在哪里。我的 JSON 数组的参数错误,我不得不删除 IncidentId... 谢谢大家的帮助!
推荐阅读
- assembly - CPU在执行某些指令时是否关心DPL和RPL?
- c# - 如何使用 FromQuery 传递复杂的 C# 对象
- c# - 将哈希字符串值转换为 SHA256
- kubernetes - 在 Job pod 中的容器退出并且 sidecar 容器仍在运行后,网络端点被禁用
- python - 如何计算python上按2个特征分组的回归的学生化残差?
- javascript - 使用 fetch API 发送 POST 请求时处理 csrf 安全性
- c# - 将项目添加到枚举的扩展方法
- javascript - 复杂对象的扩展语法
- java - 如何持久化枚举值而不是序数
- mongodb - 如何缩放 mongodb 官方 docker 镜像