0

我在 android 中调用 wcf web 服务。在我调用一个返回大量数据的方法之前,一切似乎都运行良好。结果似乎被切断并抛出了无效的 json 对象。我检查了结果,它返回了大约 9089 个字符。bufferedreader 和 inputstreamreader 都返回相同的计数和相同的结果。我尝试调用一个返回大约 2000 条记录的不同方法,它可以正常工作。

这是我正在读取结果的示例代码:

StringEntity entity = new StringEntity(jsonObject.toString());
            httpPost.setEntity(entity);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity responseEntity = httpResponse.getEntity();
            char[] buffer = new char[(int)responseEntity.getContentLength()];
            InputStream stream1 =responseEntity.getContent();
            InputStreamReader reader = new InputStreamReader(stream1);
            reader.read(buffer);
            stream1.close();
            String sInvokeReturnValue = new String(buffer);

任何形式的帮助将不胜感激。

4

1 回答 1

0

在我调用一个返回大量数据的方法之前,一切似乎都运行良好。结果似乎被切断并抛出了无效的 json 对象。

我怀疑您的读取达到了缓冲区限制并且返回的字节数没有您期望的那么多。你应该把你的阅读放在一个循环中,以确保你得到所有的输入。

我建议使用 aStringWriter来读取您的数据。例如:

// not much point on allocating a huge buffer here
char[] buffer = new char[4096];
InputStreamReader reader = new InputStreamReader(responseEntity.getContent());
try {
    StringWriter writer = new StringWriter();
    while (true) {
        int numRead = reader.read(buffer);
        if (numRead < 0) {
           break;
        }
        writer.write(buffer, 0, numRead);
    }
} finally {
    reader.close();
}
stream1.close();
String sInvokeReturnValue = writer.toString();
于 2013-06-03T21:44:40.423 回答