2
  public void parseInfo(String genderTxt2, Boolean gender){
        final String URL = "url" +
                "?adult=" + isAdult.toString() + "&gender=" + genderTxt2;

        info_text.setVisibility(View.GONE);
        listview_progress.setVisibility(View.VISIBLE);
        mRequestQueue.add(new JsonObjectRequest(Request.Method.GET,URL,null,new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {

                    if (!fPullToRefreshAttacher.isRefreshing()) {
                        names.clear();
                    }

                    VolleyLog.v("Response:%n %s", response.toString(4));

                    adapter.clear();
                    parseJSON(response);



                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
               // VolleyLog.e("Error: ", error.getMessage().toString());
                Toast.makeText(acc, "Unable to load names list! Please check connection", Toast.LENGTH_LONG).show();
            }
        }));

  mRequestQueue.start();

    }

十分に単純で、多くのデバイスで OutOfMemory 例外が発生します。何か案は?

http://crashes.to/s/834735fdc1b/details

4

1 に答える 1

2

以前にも同様の問題に遭遇しました。何が起こっているかというと、JSON解析する前にオブジェクト全体をメモリに取得しています。やりたいことは、ある種のリーダーを使用してストリーミングします。

https://sites.google.com/site/gson/streaming

ドキュメントから:

ほとんどのアプリケーションでは、オブジェクト モデル API のみを使用する必要があります。JSON ストリーミングは、いくつかの状況で役立ちます。

オブジェクト モデル全体をメモリにロードすることが不可能または望ましくない場合。これは、メモリが限られているモバイル プラットフォームで最も重要です。

ドキュメントが完全に利用可能になる前に、ドキュメントを読み書きする必要がある場合。

于 2013-09-07T18:36:17.697 に答える