2013-06-14 2 views
0

웹에서 거대한 이미지를 열려고하는데 이미지를로드하려고 할 때 두 번째 항목에서 아래 오류가 발생합니다.안드로이드 : java.lang.OutOfMemoryError

@Override 
protected void onPostExecute(String result) { 
    progress.dismiss(); 

    try { 
     JSONObject documentRoot = new JSONObject(result); 
     String data = documentRoot.getString("Data"); 
     if (data.length() < 10) { 
      Toast.makeText(Activity.this, "This is not a valid document", Toast.LENGTH_SHORT).show(); 
      finish(); 
     } else 
      openPDF(data); 
    } catch (Exception e) { 
     Toast.makeText(Activity.this, "Document could not be opened", Toast.LENGTH_SHORT).show(); 
     finish(); 
    } 
} 

이 줄은 JSONObject documentRoot = new JSONObject(result);에 있습니다.

06-14 19:54:22.218: E/XXX(16949): Uncaught exception is: 06-14 
19:54:22.218: E/XXX(16949): java.lang.OutOfMemoryError 06-14 19:54:22.218: E/XXX(16949):  at 
java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94) 
06-14 19:54:22.218: E/XXX(16949):  at 
java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:162) 
06-14 19:54:22.218: E/XXX(16949):  at 
java.lang.StringBuilder.append(StringBuilder.java:311) 06-14 
19:54:22.218: E/XXX(16949):  at 
org.json.JSONTokener.nextString(JSONTokener.java:224) 06-14 
19:54:22.218: E/XXX(16949):  at 
org.json.JSONTokener.nextValue(JSONTokener.java:107) 06-14 
19:54:22.218: E/XXX(16949):  at 
org.json.JSONTokener.readObject(JSONTokener.java:385) 06-14 
19:54:22.218: E/XXX(16949):  at 
org.json.JSONTokener.nextValue(JSONTokener.java:100) 06-14 
19:54:22.218: E/XXX(16949):  at 
org.json.JSONObject.<init>(JSONObject.java:154) 06-14 19:54:22.218: 
E/XXX(16949):  at org.json.JSONObject.<init>(JSONObject.java:171) 
06-14 19:54:22.218: E/XXX(16949):  at 
com.patient.Activity$DocumentsShowAsyncTask.onPostExecute(DocumentViewerActivity2.java:273) 
06-14 19:54:22.218: E/XXX(16949):  at 
com.patient.Activity$DocumentsShowAsyncTask.onPostExecute(DocumentViewerActivity2.java:1) 
06-14 19:54:22.218: E/XXX(16949):  at 
android.os.AsyncTask.finish(AsyncTask.java:631) 06-14 19:54:22.218: 
E/XXX(16949):  at 
android.os.AsyncTask.access$600(AsyncTask.java:177) 06-14 
19:54:22.218: E/XXX(16949):  at 
android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
06-14 19:54:22.218: E/XXX(16949):  at 
android.os.Handler.dispatchMessage(Handler.java:99) 06-14 
19:54:22.218: E/XXX(16949):  at 
android.os.Looper.loop(Looper.java:137) 06-14 19:54:22.218: 
E/XXX(16949):  at 
android.app.ActivityThread.main(ActivityThread.java:4928) 06-14 
19:54:22.218: E/XXX(16949):  at 
java.lang.reflect.Method.invokeNative(Native Method) 06-14 
19:54:22.218: E/XXX(16949):  at 
java.lang.reflect.Method.invoke(Method.java:511) 06-14 19:54:22.218: 
E/XXX(16949):  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
06-14 19:54:22.218: E/XXX(16949):  at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 06-14 
19:54:22.218: E/XXX(16949):  at 
dalvik.system.NativeStart.main(Native Method) 
+0

json으로 전체 PDF를 base64로 인코딩 했습니까? – FunkTheMonk

답변

1

데이터가 너무 커서 String에 보관할 수없는 것처럼 들립니다. 어쨌든이 PDF를 String에서로드 할 수있는 방법을 어떻게 표현하고 있습니까? JSON에 URL을 제공하는 것이 더 좋은 생각 일 수 있습니다. 그런 다음 일반 다운로더 코드를 사용하여 한 번에 너무 많은 데이터를 메모리에 저장하지 않고도 PDF를 가져올 수 있습니다.

+0

어쨌든 JSON에서 URL을 사용하지 않고 있습니까? – theJava

+0

표준 HTTP 다운로드, InputStream에서 읽기, 청크 별 청크 및 PDF 또는 이미지 인라인으로 변환하여 파일에 기록 할 수 있습니다. 그러나 JSON을 수동으로 구문 분석해야 할 수도 있습니다. PDF가 다운로드/변환되면 파일 시스템에서 열 수 있습니다. – Matt

관련 문제