2011-07-26 18 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 

このコードで画像を取得しようとすると、ここに表示されます。

ます。public void 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を取得するためにテキスト文書を読むコードが必要ですか? –