我在尝试在具有超过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();
}
}