2013-09-07 2 views
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 예외가 발생할 정도로 간단합니다. 어떤 아이디어?Volley - DiskBasedCache OutOfMemory Exception - 배열 크기가 너무 큽니다.

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

+0

스택 추적을 포함합니다. OOM 예외가 정확히 어디에 던져 집니까? String/JSON 응답이 매우 큰가요? –

+0

응답은 100 번 항목마다 매번 같은 크기입니다. 아프다 지금 예외를 게시하십시오 – Broak

+0

위의 링크를 참조하십시오 – Broak

답변

2

내가 전에 비슷한 문제에 달려있다. 무슨 일이 일어나고 있는지를 파싱하기 전에 전체 JSON 객체를 메모리에 저장하는 중입니다. 당신이하고 싶은 것은 그것을 스트림하는 일종의 독자를 사용합니다. 다큐먼트에서

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

:

대부분의 응용 프로그램 만 개체 모델 API를 사용해야합니다. JSON 스트리밍은 다음과 같은 몇 가지 상황에서만 유용합니다.

전체 개체 모델을 메모리에로드하는 것이 불가능하거나 바람직하지 않은 경우. 이는 메모리가 제한적인 모바일 플랫폼에서 가장 관련이 있습니다.

문서가 완전히 사용되기 전에 읽거나 쓸 필요가있는 경우.

+0

이것이 Volley에서 지원되는지 확인하십시오. 그리고 어떻게? – Broak

+0

Volley 소스를 보면 RequestQueue의 요청을 'PriorityBlockingQueue'와 순차적으로 처리하지 않는 것처럼 보입니다. Intent Service를 대기열에 넣고 Gson 스트리밍을 사용하여 동일한 결과를 얻었습니다. 이 게시물 (http://stackoverflow.com/questions/17734789/volley-outofmemoryerror)에서 볼리는 현재 스트리밍을 지원하지 않는 것 같습니다. – wangyif2

+0

한 번에로드되는 json 항목의 수를 제한하기 위해 무한로드 어댑터를 사용할 수 없습니까? – Broak