Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

AsyncTask - не заходит в блок onCanceled - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Смена фона http://www.cyberforum.ru/android-dev/thread382570.html
Появилась нужда в смене фона через настройки, не подскажете как это делается? Пишу tw.setBackgroundResource(R.layout.black_bg); для того что бы менялся фон, но оно мне выдает ошибку. Что нужно...
Программирование Android Размер приложения Здравствуйте! Возникла проблема с разрешением приложения. Что нужно сделать что бы приложение отображалось на всех экранах одинаково? Вот создал программку, а она не помещается на экране, хотелось... http://www.cyberforum.ru/android-dev/thread382077.html
Перевод числа из 10-ной системы счисления в 2-ную Программирование Android
мне нужно с 10-ной системы перевести в 2-ву, но этот код не работает, а именно строка: d = Character.forDigit (a% 2, 10); подскажите, как это исправить, спасибо. вот моя функция: protected...
Программирование Android "The application Butt (process.com.samples.Butt) has stopped unexpectedly. Please try again"
работаю на эклипс, программирую калькулятор для android. у меня есть 2 программы, 1 из них: package com.samples.But; import android.app.Activity; import android.os.Bundle; import...
Программирование Android Работа с камерой в Android 2.* http://www.cyberforum.ru/android-dev/thread376951.html
Нужно заставить приложение выводить картинку с камеры на экран (превьюшка). Вроде проще простого, но не работает: package com.oodakakosc.samples.camera; import java.io.IOException; import...
Программирование Android Фрэймворк для Android Вот решил начать изучать, и купил мобилу :) И, видимо, нашел время. С каким фрэймворком работаете вы? Почему? И какие еще знаете? подробнее

Показать сообщение отдельно
Опа!!
15 / 15 / 0
Регистрация: 30.09.2009
Сообщений: 89

AsyncTask - не заходит в блок onCanceled - Программирование Android

13.11.2011, 22:16. Просмотров 978. Ответов 0
Метки (Все метки)

Доброго времени суток.

Имеется AsyncTask класс с методами doInBackround, onPostExecute и onCanceled соотвтественно:

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
private class ParseTrack extends AsyncTask<HtmlParser, Void, Elements> {
 
        @Override
        protected Elements doInBackground(HtmlParser... parser) {
            try {
                parser[0].loadData();
            } catch (IOException ioException) {
                                cancel(true);
                Log.e("OwnError", "NetError: " + ioException.getMessage());
                // parsing or network error
                Runnable networkIssueToast = new Runnable() {
 
                    public void run() {
                        Toast.makeText(AddPackage.this, "Loading error, try again",
                                Toast.LENGTH_LONG).show();
                    }
                };
 
                // show toast in the UI thread
                runOnUiThread(networkIssueToast);
 
            } catch (Throwable critException) {
                                cancel(true);
                Log.e("OwnError", "CritError: " + critException.getMessage());
                // critical error
                Runnable critIssueToast = new Runnable() {
 
                    public void run() {
                        Toast.makeText(AddPackage.this, "Critical error",
                                Toast.LENGTH_LONG).show();
                    }
                };
                // show toast in the UI thread
                runOnUiThread(critIssueToast);
            }
 
            if (parser[0] != null) {
                return parser[0].getLoadedData();
            } else {
                return null;
            }
        }
 
        // calls if AsyncTask is completed because of an error
        @Override
        protected void onCancelled() {
            mProgDialog.dismiss();
            Log.e("OwnError", "error, AsyncTask canceled");
        }
 
        // calls after succesfull executing doInBackground
        protected void onPostExecute(Elements trackInfo) {
            mProgDialog.dismiss();
 
            if (trackInfo != null) {
                Package newPackage = new Package(
                        mId_edit.getText().toString(), // id
                        mDesc_edit.getText().toString(), // package name
                        mParser.getLink(), // link for parsing
                        new Date(), // create track date
                        new Date(), // last update, now the same as create
                        CarrierSwitcher.getCarrier(), // carrier type
                        mParser.getLoadedData()); // loaded via network data
 
                // object created, now put its into DB
                if (!isExistsInDb(newPackage.getId(), newPackage.getService())) {
                    packageToDb(newPackage);
                } else {
                    Toast.makeText(AddPackage.this,
                            "Package with the same ID & carrier already added!",
                            Toast.LENGTH_LONG).show();
                    // TODO: may be I should call isExistsInDb at the beginning,
                    // before data loading?
                }
 
            } else {
                Toast.makeText(AddPackage.this, "Loading error",
                        Toast.LENGTH_LONG).show();
            }
        } // onPostExecute
    } // ParseTrack class
В случае вылета эксепшна IOException, вызываю cancel(true), что, по идее, должно завершить асинхронную задачу и, как говорит документация, гарантированно зайти в onCanceled, минуя doInBackround. Эксепшн вылетает, но захода в onCanceled не следует никаким образом. Почему так случается - не понимаю, есть какие-нибудь идеи, товарищи? Мне кажется, что при вылете IOException асинхронный поток заверщается самостоятельно и к моменту вызова cancel(true) в обработчике исключений он уже итак завершен, но почему то такое завершение аварийным не считается и я все равно попадаю в doInBackround...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru