Android не хватает памяти? - PullRequest
0 голосов
/ 26 июля 2011

Я получаю эти ошибки при получении изображений здесь.

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 () throws 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");
            }
     }

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Я бы сказал, что это потому, что вы используете BufferedHttpEntity, он пытается загрузить весь ответ в память.Вы пробовали без него?

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

, а затем обработали его?

0 голосов
/ 26 июля 2011

Я не знаю, собираетесь ли вы это делать, но вы добавляете каждую строку URL-адресов (?) Из текстового файла, который вы читаете, в StringBuffer, а затем назначаете URL-адреса, считанные до сих пор, для imageUrl. Это означает, что вы в основном делаете это:

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

Возможно, это вызывает проблемы с памятью.

...