我在尝试在具有超过89个项目的android中构建JSONArray时遇到问题。它可以很好地处理89个项目,但是一旦我放入90个或更多,我就会收到错误消息“ jsonexception Expected:after”。我对android和java还是很陌生,所以如果我能找到更多错误详细信息可以帮助您,请告诉我如何做。我认为问题不在于JSON本身,因为当我确实从URL本身验证它是有效的json时。我将在下面发布代码。

                HttpGet request = new HttpGet(SERVICE_URL + "/GetResListNoStatus/" + FacID);
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpResponse response = httpClient.execute(request);

            HttpEntity responseEntity = response.getEntity();

            // Read response data into buffer
            char[] buffer = new char[(int)responseEntity.getContentLength()];
            InputStream stream = responseEntity.getContent();
            InputStreamReader reader = new InputStreamReader(stream);
            reader.read(buffer);
            stream.close();

                //this line here is where the error is occuring
            JSONArray plates = new JSONArray(new String(buffer));


如果有人有任何想法,我将非常感谢任何人可以提供的任何帮助。谢谢。

最佳答案

您只需在InputStream上调用一次read()即可。这将读取所有可用数据,这些数据可能是全部请求,也可能只是几个字节。您将需要重复调​​用read(buffer),将读取的内容追加到固定缓冲区中(您可以将其写入ByteArrayOutputStream中),并在read()返回-1时停止。

编辑

尝试这样的事情。

public static void main(String[] args) {
    try {
        URL url = new URL("http://www.google.com");

        InputStream is = url.openStream();

        ByteArrayOutputStream os = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];

        int count;
        while ((count = is.read(buffer)) != -1) {
            os.write(buffer, 0, count);
        }

        is.close();

        String json = new String(os.toByteArray());

        System.out.println(json);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

09-15 14:08