我在尝试在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));
如果有人有任何想法,我真的很感激任何人都可以给予帮助。感谢。
答案 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。