Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从服务器返回的结果是切断并抛出无效的JSON异常_Java_Android_Json_Wcf - Fatal编程技术网

Java 从服务器返回的结果是切断并抛出无效的JSON异常

Java 从服务器返回的结果是切断并抛出无效的JSON异常,java,android,json,wcf,Java,Android,Json,Wcf,我正在调用android中的wcf web服务。在我调用一个返回相当多数据的方法之前,所有这些方法似乎都可以正常工作。结果似乎被切断并抛出一个无效的json对象。我检查结果,它返回大约9089个字符。bufferedreader和inputstreamreader都返回具有相同结果的相同计数。我尝试调用一个不同的方法,返回大约2000条记录,它可以正常工作 下面是我读取结果的示例代码: StringEntity entity = new StringEntity(jsonObject.toStr

我正在调用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);
任何形式的帮助都将不胜感激

在我调用一个返回相当多数据的方法之前,所有这些方法似乎都可以正常工作。结果似乎被切断并抛出一个无效的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,我也会收到相同的错误。