このコードを使用して、サーバーから取得した JSON 配列を解析しています。
try {
URL u = new URL("http://54.68.139.250/get_user_likes");
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setRequestMethod("GET");
conn.connect();
InputStream is = conn.getInputStream();
byte[] b = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ( is.read(b) != -1)
baos.write(b);
String JSONResp = new String(baos.toByteArray());
JSONArray arr = new JSONArray(JSONResp);
for (int i=0; i < arr.length(); i++) {
result.add(convertArticle(arr.getJSONObject(i)));
}
return result;
}
catch(Throwable t) {
t.printStackTrace();
}
return null;
このコードは私の電話でうまく機能します。残念ながら、Google Nexus 7 の仮想デバイスで Genymotion エミュレーターを使用すると、JSON 配列が若干変更されます。JSON 配列の 95% は問題ありませんが、最後の近くで切り捨てられており、文字 1253 で json 配列の約 4 文字がランダムに欠落しているため、次のようになります。
org.json.JSONException: Expected ':' after top_id at character 1253 of [{"top_id":6,"top_url":
これはエミュレータのメモリの問題だと思います。その基本メモリは 1024 です。その量を増やしても何も変わりません。問題の背後にある理由に関するヒントをいただければ幸いです。また、改善の余地がある場合は、私のコードにコメントしてください。:)