将json对象发送到android中的HTTP服务器

Posted

技术标签:

【中文标题】将json对象发送到android中的HTTP服务器【英文标题】:sending json object to HTTP server in android 【发布时间】:2011-09-15 14:13:37 【问题描述】:

我正在使用以下代码将 JSON 对象发送到 HTTP 服务器。

主要是我还必须发送布尔值。

public void getServerData() throws JSONException, ClientProtocolException, IOException 

    ArrayList<String> stringData = new ArrayList<String>();
    DefaultHttpClient httpClient = new DefaultHttpClient();
    ResponseHandler <String> resonseHandler = new BasicResponseHandler();
    HttpPost postMethod = new HttpPost("http://consulting.for-the.biz/TicketMasterDev/TicketService.svc/SaveCustomer");

    JSONObject json = new JSONObject();
    json.put("AlertEmail",true);
    json.put("APIKey","abc123456789");
    json.put("Id",0);
    json.put("Phone",number.getText().toString());
    json.put("Name",name.getText().toString());
    json.put("Email",email.getText().toString());
    json.put("AlertPhone",false);      
    postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));
    String response = httpClient.execute(postMethod,resonseHandler);
    Log.e("response :", response);
    

但它在该行中显示异常

String response = httpClient.execute(postMethod,resonseHandler);

作为

org.apache.http.client.HttpResponseException: Bad Request

谁能帮帮我。

【问题讨论】:

postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8"))); 是干什么用的? 【参考方案1】:

错误请求是服务器说它不喜欢您的 POST 中的某些内容。

我能看到的唯一明显问题是您没有告诉服务器您正在发送 JSON,因此您可能需要设置一个 Content-Type 标头来指示正文是 application/json:

postMethod.setHeader( "Content-Type", "application/json" );

如果这不起作用,您可能需要查看服务器日志以了解它为什么不喜欢您的 POST。

如果您无法直接访问服务器日志,则需要与服务器所有者联系以尝试调试。可能是您的 JSON 格式稍有错误、缺少必填字段或其他类似问题。

如果您无法访问服务器的所有者,您可以尝试使用数据包嗅探器(例如 WireShark)从您的应用程序和成功的 POST 中捕获数据包,并比较两者以尝试并找出有什么不同。这可能有点像大海捞针,特别是对于大型机构。

如果您无法获得成功 POST 的示例,那么您就已经很充实了,因为您没有参考点。

【讨论】:

【参考方案2】:

这可能是非技术性的,但 字符串响应 = httpClient.execute(postMethod,-->resonseHandler); 这里变量名有拼写错误,使用responseHandler(上面定义的)

【讨论】:

以上是关于将json对象发送到android中的HTTP服务器的主要内容,如果未能解决你的问题,请参考以下文章

将json对象发送到android中的webservice

从 Android 发送 JSON HTTP POST 请求

如何将复杂(嵌套)对象解析为 JSON 并在 Flutter 中使用 HTTP 将其发送到服务器?

通过 JSON 将数据从 android 发送到服务器

如何从android中的json对象呈现和选择联系人?

从 Android 发送到计算引擎服务器的 JSON 返回 null