【问题标题】:Huge HttpPost response : JSON巨大的 HttpPost 响应:JSON
【发布时间】:2012-06-27 21:51:03
【问题描述】:

我正在发送一个 HttpPost 请求并获得 JSON 格式的响应。但是,由于响应如此巨大,与我在浏览器中看到的相比,我只收到一小部分响应。我的代码如下:

StringBuilder builder = new StringBuilder();
HttpPost httpPost = new HttpPost(uri);
HttpResponse response = client.execute(httpPost);
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
    builder.append(line);
}

因为默认缓冲区大小是 8192 个字符。我只是尝试提供更多价值,但这没关系。所以,关于这个的任何建议......

【问题讨论】:

  • 您确定您只收到了部分响应吗?请记住,您只能将有限数量的数据打印到日志中。
  • 是的,我确信它只是给出了部分响应。
  • 你怎么确定?你用它做什么来检查它?如果响应太大,您应该会耗尽内存。
  • 不,我刚刚在系统浏览器中进行了检查。它将显示 JSON 响应,我使用了在线字符计数器,它给出了大约 200000+ 个字符。那么,问题是……
  • 这又是一个循环,我再次问,你怎么知道确定你在 Android 客户端上收到了部分响应。您是在检查响应字符串的长度,还是直接将其打印到日志中,或者将其放在 TextView 中?

标签: android json http bufferedreader


【解决方案1】:

我认为 +Che Jami 在 OP 中有所体现。

Manjunath,logcat 一次只能输出 1024 个字符。您是否尝试过一次输出字符串生成器 1024 个字符?你读入后检查了字符串的长度吗?

【讨论】:

    【解决方案2】:

    在您的回复中仅发送您完整回复的部分(批次),并且在您的回复未完成时使用轮询。

    【讨论】:

    • 阅读以下主题:groups.google.com/forum/?fromgroups#!topic/android-developers/… 您可能会发现这很有用。
    • 谢谢,很有帮助。但是,我仍然不清楚我的问题。
    • 你不能在单个请求中收到这么大的消息,所以你应该有 n 个请求。在每个请求中,都应该发送一部分消息,并且您的接收者应该将消息解析为一条大消息。这样您就不会再遇到这个问题了,但是,您将有更多针对单个消息的请求。
    • 是的,我认为这是我现在应该做的。我将搜索如何执行相同的请求 'n' 次,并在 'n' 部分中收集消息并转储到文件中。
    • 我认为这里对 HTTP 的工作原理和轮询是什么存在误解。
    猜你喜欢
    • 2014-10-21
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多