构建超过89个项目的JSONArray

时间:2012-02-20 15:55:44

标签: java android json

我在尝试在android中构建一个JSONArray时遇到问题,其中包含超过89个项目。它可以正常使用89项,但是一旦我输入90或更多,我得到错误“jsonexception expect: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));

如果有人有任何想法,我真的很感激任何人都可以给予帮助。感谢。

2 个答案:

答案 0 :(得分:4)

你只在InputStream上调用一次read()。这将读取任何可用的数据,这可能是所有请求或只是几个字节。您需要重复调​​用read(缓冲区),将读取的内容附加到固定缓冲区(您只需将其写入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();
    }
}

答案 1 :(得分:1)

我相信你得到的错误可能是没有收到整条信息。

将“new String(buffer)”写入logcat。