Android читает файл 917KB из Интернета вызывает ошибку памяти? - PullRequest
0 голосов
/ 21 сентября 2011
            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();
            // Get the response
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()),1024*32);

            StringBuffer sb = new StringBuffer();

            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line.replace("  ", ""));
            }
            rd.close();
            result = sb.toString();

Я подозреваю, что это факт, что создается слишком много строк. Как я могу видеть, возможна ли readline и вставлять перевод строки прямо в stringbuilder. Какой еще способ сделать это? Файл размером чуть менее 1 МБ

Вот лог:

09-27 12: 56: 07.740: ОШИБКА / ОШИБКА: проблема в LDataListView: refreshError 09-27 12: 56: 07.740: ОШИБКА / ERROR: ------------------------------------- ------ 09-27 12: 56: 13.339: ОШИБКА / Dhcpcd (10598): отправка DHCP_REQUEST с xid 0x5a93b3de, следующая через 3,58 секунды 09-27 12: 56: 13.549: ОШИБКА / dalvikvm-heap (12862): Недостаточно памяти при выделении 6064234 байта. 09-27 12: 56: 13.549: ОШИБКА / dalvikvm (12862): Недостаточно памяти: Размер кучи = 15687 КБ, Выделено = 6704 КБ, Размер растрового изображения = 8617 КБ 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): java.lang.OutOfMemoryError 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на java.lang.AbstractStringBuilder.enlargeBuffer (AbstractStringBuilder.java:97) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на java.lang.AbstractStringBuilder.append0 (AbstractStringBuilder.java:117) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на java.lang.StringBuilder.append (StringBuilder.java:250) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): по адресу se.brickit.foundation.data.BrHttpClient.sendGetRequest (BrHttpClient.java:56) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): по адресу se.brickit.foundation.data.BrDataProvider. (BrDataProvider.java:100) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на se.brickit.foundation.iviews.LisaDataListView $ RefreshTask.onPostExecute (LisaDataListView.java:110) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): в se.brickit.foundation.iviews.LisaDataListView $ RefreshTask.onPostExecute (LisaDataListView.java:1) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на android.os.AsyncTask.finish (AsyncTask.java:417) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на android.os.AsyncTask.access $ 300 (AsyncTask.java:127) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:429) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на android.os.Handler.dispatchMessage (Handler.java:99) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на android.os.Looper.loop (Looper.java:144) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на android.app.ActivityThread.main (ActivityThread.java:4937) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на java.lang.reflect.Method.invokeNative (собственный метод) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): в java.lang.reflect.Method.invoke (Method.java:521) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 09-27 12: 56: 13.559: ОШИБКА / AndroidRuntime (12862): в dalvik.system.NativeStart.main (собственный метод) 09-27 12: 56: 14.819: ОШИБКА / ActivityManager (101): не удалось установить главное приложение изменено! 09-27 12: 56: 48.499: ОШИБКА / Служба BluetoothHeadset (201): java.util.NoSuchElementException

Редактирование :::

больше информации:

Это строка JSON. в основном один объект с массивом элементов. Весь канал изобилует закодированными изображениями, что делает его намного больше, чем должно быть (к сожалению, это не мой канал). кажется, что iphone читает его, но мой телефон HTC иногда делает это, но обычно попадает в исключение памяти в строке добавления sb.

Я также попробовал просто прочитать его, например:

            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();
            InputStream iFile = conn.getInputStream();

            result = inputStreamToString(iFile);

но та же проблема там тоже.

...