结果从服务器返回正在切断并抛出不是有效的JSON异常

时间:2013-06-03 19:29:01

标签: java android json wcf

我在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);

非常感谢任何形式的帮助。

1 个答案:

答案 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();