我在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);
非常感谢任何形式的帮助。
答案 0 :(得分:0)
在我调用返回相当多数据的方法之前,所有似乎都工作正常。看起来结果被切断并且没有抛出有效的json对象。
我怀疑你的读取是达到缓冲区限制并返回没有你期望的那么多字节。你应该把你的阅读放在一个循环中,以确保你得到所有的输入。
我建议使用StringWriter
来读取您的数据。例如:
// 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();