如何使用 AsyncHttpClient 发送 JSON 正文?

Posted

技术标签:

【中文标题】如何使用 AsyncHttpClient 发送 JSON 正文?【英文标题】:How can I send a JSON body with AsyncHttpClient? 【发布时间】:2019-03-12 06:47:24 【问题描述】:

我正在使用AsyncHttpClient 库从一个非常基本的 android 应用程序发出 HTTP 请求。现在,我只需要使用 JSON 主体发出 POST 请求(这是一个强制性约束,因为我必须使用 REST 服务使用包含用户名和密码的期望请求)。

对 Android 开发和相关库了解不多,我尝试向 Google 发出一个简单的 GET 请求,并且效果很好。然后,我尝试切换到 POST 请求,但从文档看来,post 方法严格需要 RequestParams 参数。 我真的需要发送一个JSON:有没有办法用AsyncHttpClient 这样做?我尝试了几种在 Web 和 *** 上都找到的解决方案,但遗憾的是没有一个有效。

最后,作为最后的机会,我愿意切换库(并且也欢迎向这个方向提出建议 - 至少如果它们像 AsyncHttpClient 那样易于使用,考虑到我的经验) ,但我更愿意坚持我目前的选择。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

首先,我建议你使用改造库,它简单、有用且可爱 但是现在,我们应该知道您是如何发帖的, 例如,您是否对此进行测试:

private static AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("param1", "Test"); 
client.post(Url, params, responseHandler);
JSONObject jsonParams = new JSONObject();
jsonParams.put("param1", "Test");
StringEntity entity = new StringEntity(jsonParams.toString());
client.post(context, Url, entity, "application/json",responseHandler);

【讨论】:

您的解决方案非常接近我最终采用并且有效的解决方案。无论如何,要使其正常工作,必须包含 cz.msebera.android.httpclient.entity.StringEntity:如果您从另一个库导入 StringEntity,它将与声明的 post 方法的签名不匹配通过 AsyncHttpClient (这就是为什么它对我不起作用的原因)。

以上是关于如何使用 AsyncHttpClient 发送 JSON 正文?的主要内容,如果未能解决你的问题,请参考以下文章

如何在AsyncHttpClient中停止重定向并获取响应

tornado下https配置

HttpClient学习—— AsyncHttpClient使用

android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件

tornado关于AsyncHTTPClient的使用笔记

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)