2011-07-26 3 views
-1

여기에 이미지를 가져 오는 동안 이러한 오류가 계속 발생합니다.Android에 메모리 부족 오류가 있습니까?

07-26 17:21:29.194: ERROR/AndroidRuntime(396): java.lang.RuntimeException: An error occured while executing doInBackground() 
07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
     07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
     07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.lang.Thread.run(Thread.java:1019) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396): Caused by: java.lang.OutOfMemoryError 

이 코드로 이미지를 검색하려고하면 여기에 나타납니다.

는 공공 무효 getImages() 나는 당신이 메모리에 전체 응답을로드하려고 BufferedHttpEntity을 사용하고 있기 때문에 말할 것 IOException가 {

DefaultHttpClient httpclient = new DefaultHttpClient(); 

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt"); 
    HttpResponse response; 

     response = httpclient.execute(httppost); 


      HttpEntity ht = response.getEntity(); 

      BufferedHttpEntity buf = new BufferedHttpEntity(ht); 

      InputStream is = buf.getContent(); 


      BufferedReader r = new BufferedReader(new InputStreamReader(is)); 

      StringBuilder total = new StringBuilder(); 
      String line; 
      while ((line = r.readLine()) != null) { 
       total.append(line + "\n"); 

       imageUrl = total.toString(); 
       Log.v("getImage1", "Retreived image"); 
      } 
    } 
+0

비슷한 스레드를 찾으십시오. 그들 중 많은 수가 있습니다. –

+0

그들은 내 질문과 관련이 없습니다. –

답변

1

가 발생합니다. 그것없이 시도 했습니까?

InputStream is = response.getEntity().getContent(); 

?

+0

내가 그것을 제거하면 구문은 아래에 호출 된 다른 장소에서 발생합니다. –

+0

구문이란 무엇을 의미합니까? BufferedHttpEntity를 다른 곳에서 사용하고 있습니까? 실제로 버퍼링 된 엔티티로 그 점프를 통과 할 지 확신하지 못합니다. 구현 확인 : http://goo.gl/41MEV. 그것은 컨스트럭터에 내용이 담긴 바이트 배열을 조만간 큰 이미지로 생성합니다. 그러면 어쨌든 OOM 예외가 발생합니다. – mariozski

+0

와우. 그래서 나는 이것을하기에 더 효과적인 방법이 있어야한다는 것을 알고 있습니다. –

0

당신이 이것을하려는 의도가 있는지 모르겠지만, 당신이 StringBuffer에 읽어 들인 텍스트 파일의 각 줄 (?)을 추가하고 나서 지금까지 읽은 URL을 imageUrl . 즉, 기본적으로 다음을 수행하고 있음을 의미합니다.

imageUrl = URL1 
imageUrl = URL1, URL2 
... 
imageUrl = URL1, URL2, ... URLn 

메모리 문제의 원인 일 수 있습니다.

+0

그래, 내가하는 일은 ... 내 웹 사이트에 텍스트 파일이있다. 응용 프로그램에서 텍스트 문서를 가져 와서 그들로부터 URL을 읽은 다음 변수로 설정합니다 ... 이제 텍스트 문서를 사용하는 이유는 URL이 변경되기 때문입니다. 그리고 이것이 응용 프로그램을 업데이트 할 수있는 유일한 방법 일 것입니다. url을 바꾸는 것. –

+0

네,하지만 버퍼 라인을 반복하면서 중간 선을 계속 지정하는 것입니다. 그래서 당신은 URl1을 할당하고, 다음 루프에서는 URL1, URL2를 할당합니다 ... 그냥 버퍼에 줄을 읽어서 끝에서 할당합니까? –

+0

위의 코드에서 예를 들어 설명해 주시겠습니까? 또는 URL을 가져 오기 위해 텍스트 문서를 읽는 코드가 필요합니까? –