Android - 在移动设备中接收长度超过1000个字符的JSonObject字符串的问题

时间:2015-03-26 07:57:01

标签: android json wcf

我的Android应用程序访问(.NET)WCF服务(部署在IIS7上的单独机器上)以检索客户的数据以显示在移动设备上,但当JSon字符串数据大小增加到1000个字符时,异常处理程序捕获它错误“字符串以无效字符终止”,这应该是“}]”,但由于字符串截断,它找不到它。

令人困惑的是,它只在我从我的移动设备(即联想S960)执行应用程序时才会发生,但是从Android Studio完美运行,所以我通过调试源代码找不到任何东西。最初,我认为它可能是一个JSon大小的问题,但是当我通过浏览器(URL)从客户端机器访问相同的WCF服务时,我得到了完整的json字符串,这表明IIS正在返回完整的数据。

我的问题是:为什么只有移动设备(生产环境)无法获得超过1000个字符的JSon字符串?以下是使用WCF数据供您参考的代码。

private synchronized static boolean getRawXML(String URL,
        SerializedObject responseOut,ErrMsgOut errMsgOut) {

    try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(URL);
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-type", "application/json");

        HttpResponse response = client.execute(request);

        HttpEntity entity = response.getEntity();

        if (entity.getContentLength() != 0) {
            Reader reader = new InputStreamReader(response.getEntity().getContent());
            char[] buffer = new char[(int) response.getEntity().getContentLength()];
            reader.read(buffer);
            reader.close();

            responseOut.setResponse(new String(buffer));
        }
        else {
            errMsgOut.setErrorDescription("Unable to get raw data!");
            return false;
        }
    } catch(Exception ex) {
        ex.printStackTrace();
        errMsgOut.setErrorDescription("getRawXML( )\n" + ex.getMessage());
        return false;
    }
    return true;
}

1 个答案:

答案 0 :(得分:0)

  

当我从客户端计算机访问同一个WCF服务直通(URL)浏览器时,我得到完整的json字符串,这表明IIS正在返回完整数据。

检查从服务器返回的内容长度标头。 IIRC,由于压缩和分块响应数据之类的事情,你真的不能指望内容长度正好是返回数据的长度。

此外,不是试图判断缓冲区大小,将输出流读入字符串并处理字符串,而只是处理输出流。查看android.util.JsonReader以获取相关方法。它在内存使用方面也更好。