Java 从服务器返回的结果是切断并抛出无效的JSON异常
我正在调用android中的wcf web服务。在我调用一个返回相当多数据的方法之前,所有这些方法似乎都可以正常工作。结果似乎被切断并抛出一个无效的json对象。我检查结果,它返回大约9089个字符。bufferedreader和inputstreamreader都返回具有相同结果的相同计数。我尝试调用一个不同的方法,返回大约2000条记录,它可以正常工作 下面是我读取结果的示例代码:Java 从服务器返回的结果是切断并抛出无效的JSON异常,java,android,json,wcf,Java,Android,Json,Wcf,我正在调用android中的wcf web服务。在我调用一个返回相当多数据的方法之前,所有这些方法似乎都可以正常工作。结果似乎被切断并抛出一个无效的json对象。我检查结果,它返回大约9089个字符。bufferedreader和inputstreamreader都返回具有相同结果的相同计数。我尝试调用一个不同的方法,返回大约2000条记录,它可以正常工作 下面是我读取结果的示例代码: StringEntity entity = new StringEntity(jsonObject.toStr
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);
任何形式的帮助都将不胜感激
在我调用一个返回相当多数据的方法之前,所有这些方法似乎都可以正常工作。结果似乎被切断并抛出一个无效的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();
//在这里分配一个巨大的缓冲区没有多大意义
char[]buffer=新字符[4096];
InputStreamReader reader=新的InputStreamReader(responseEntity.getContent());
试一试{
StringWriter编写器=新的StringWriter();
while(true){
int numRead=reader.read(缓冲区);
if(numRead<0){
打破
}
writer.write(缓冲区,0,numRead);
}
}最后{
reader.close();
}
stream1.close();
字符串sInvokeReturnValue=writer.toString();
您似乎相信此处的内容长度;如果您尝试读取,直到没有可用的数据,该怎么办?您仍然收到错误吗?是的,如果在没有可用数据之前替换read,我也会收到相同的错误。