2

このコードを使用して、サーバーから取得した 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 です。その量を増やしても何も変わりません。問題の背後にある理由に関するヒントをいただければ幸いです。また、改善の余地がある場合は、私のコードにコメントしてください。:)

4

2 に答える 2

2

の戻り値を確認する必要がありis.read()ます。変化する

     while ( is.read(b) != -1)
            baos.write(b);

     int nread;
     while ( (nread=is.read(b)) != -1)
          baos.write(b, 0, nread);
于 2015-04-05T16:40:34.847 に答える