Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Alexvp
111 / 75 / 8
Регистрация: 03.08.2014
Сообщений: 387
#1

Вылет при выролнении объемной задачи в AsyncTask

19.08.2014, 23:24. Просмотров 639. Ответов 2
Метки нет (Все метки)

Добрый день,

Столкнулся с одной проблемой и не пойму с какой стороны искать решение.
Приложение при первоначальном запуске конфигурируется исходя из характеристик аппарата пользователя. Процесс большой, поэтому выполняется в AsyncTask. При небольших объемах задачи все работает отлично. Но при увеличении объема и, следовательно, времени обработки, происходит вылет.
Задача это открытие текстовых файлов и разбиение их на страницы вывода в зависимости от размеров экрана. Описание каждой страницы сохраняется в таблице базы данных.
Вот лог с ошибками:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
08-19 15:14:13.535: W/ResourceType(935): No package identifier when getting value for resource number 0x00000000
08-19 15:14:13.555: W/dalvikvm(935): threadid=11: thread exiting with uncaught exception (group=0xb3ad7ba8)
08-19 15:14:13.575: E/AndroidRuntime(935): FATAL EXCEPTION: AsyncTask #1
08-19 15:14:13.575: E/AndroidRuntime(935): Process: com.test.111, PID: 935
08-19 15:14:13.575: E/AndroidRuntime(935): java.lang.RuntimeException: An error occured while executing doInBackground()
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.os.AsyncTask$3.done(AsyncTask.java:300)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.lang.Thread.run(Thread.java:841)
08-19 15:14:13.575: E/AndroidRuntime(935): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.content.res.Resources.getValue(Resources.java:1123)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.content.res.Resources.openRawResource(Resources.java:1038)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.content.res.Resources.openRawResource(Resources.java:1015)
08-19 15:14:13.575: E/AndroidRuntime(935):  at com.test.111.LoadActivity$CountPages.doInBackground(LoadActivity.java:210)
08-19 15:14:13.575: E/AndroidRuntime(935):  at com.test.111.LoadActivity$CountPages.doInBackground(LoadActivity.java:1)
08-19 15:14:13.575: E/AndroidRuntime(935):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-19 15:14:13.575: E/AndroidRuntime(935):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-19 15:14:13.575: E/AndroidRuntime(935):  ... 4 more
Подскажите, в чем может быть причина вылетов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 23:24
Ответы с готовыми решениями:

Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Здравствуйте, почему при нажатии на пункт Action Bar'а вылетает ошибка? ...

Progressdialog при выполнении asynctask
Здравствуйте! Есть asynctask который отправляет запрос и после парсит...

Запуск AsyncTask при повороте девайса
Здравствуйте, мне нужно запустить AsyncTask при повороте девайса... код есть...

Как реализовать Синхронное выполнение двух функций при вызове AsyncTask
как сделать так чтобы при нажатии на BUTTON с начало выполнилась функция ...

Вылет при фотографировании
Давно пытаюсь словить эту проблему: вылетает приложение 1 раз на ~50 снимков -...

2
ILNAR_93
Android
237 / 237 / 49
Регистрация: 19.01.2013
Сообщений: 1,870
Записей в блоге: 3
20.08.2014, 08:06 #2
попробуй

Project > Clean

и попробуй компилировать.

Добавлено через 3 минуты
Но наверняка ошибка в коде,

он не может найти ресурс

Добавлено через 44 секунды
может проблема в фале R.java ?
0
Alexvp
111 / 75 / 8
Регистрация: 03.08.2014
Сообщений: 387
20.08.2014, 09:15  [ТС] #3
Проверял на реальном устройстве и на эмуляторе в версиях от 2.3.3 до 4.4 везде одно и тоже - при числе текстовых файлов меньше 15 все работает отлично, поэтому не думаю, что в коде есть ошибка.
Алгоритм работы таков - при первоначальном запуске приложение читает файл конфигурации в формате xml, где перечислены все части книги и имена файлов, где эти части расположены. Имена файлов сохраняются в массиве. doInBackground в цикле берет из этого массива очередное имя файла, считывает содержимое и разбивает на страницы. Так как doInBackground до 15 файлов обрабатывает их корректно, то пока считаю, что его код не содержит ошибок.
Массив формируется таким кодом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    String[] Files;
    String[] TitleChapter;
 
    private void loadpartsbook() {
        // загрузка списка частей (глав) книги
    // в начале определяем сколько всего частей     
        int len = 0;
        try {
            XmlPullParser parser = getResources().getXml(R.xml.bookparts);
            while (parser.getEventType()!= XmlPullParser.END_DOCUMENT) {
                if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("part")) {
                    len++;
                }
                parser.next();
            }
        }
        catch (Throwable t) {
        }
       // создаем массивы
        String[] itemid = new String[len];
        String[] partname = new String[len];
        String[] filepart = new String[len];
        int m=0;
 
         try {
                XmlPullParser parser = getResources().getXml(R.xml.bookparts);
                while (parser.getEventType()!= XmlPullParser.END_DOCUMENT) {
                    if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("part")) {
                        itemid[m] = parser.getAttributeValue(0);
                        partname[m] = parser.getAttributeValue(1);
                        filepart[m] = parser.getAttributeValue(2);
                        m++;
                    }  
                        parser.next();
                }   
            }
            catch (Throwable t) {
            }
             // сохраняем созданные массивы в общих переменных для дальнейшей обработки
         Files = filepart;
         TitleChapter = partname;
    }
На свой взгляд ошибок не вижу. Могу выложить код AsyncTask, но он очень объемный

Добавлено через 31 минуту
Упс... как говорится, утро вечера мудренее Стал перепроверять файл конфигурации и увидел опечатку
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2014, 09:15

Вылет при старте программы
Программа должна содержать 2 EditText с OnFocusChangeListener и TextWatcher ...

Вылет при нажатии кнопки
Доброго времени суток. Опять непонятная ошибка, при нажатии кнопки приложение...

Canvas-игра. Вылет при сворачивании
public class GameView extends SurfaceView { private GameThread mThread; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru