Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

Обработать любую ошибку не закрывая программу

12.02.2014, 06:36. Показов 932. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возможно ли (тяжело ли) подобное? В программе сотня методов и возможно допустить ошибку в одной из них. Или не обработать (полениться или не предусмотреть) все через try...

Умею (нашел модуль/класс и переработал не до конца поняв) обрабатывать глобальную ошибку вылетания программы - выводит код ошибки в диалог и записывает в текстовик, отправляет в LogCat. Оригинальный модуль (убрал это) предлагал даже ошибку по почте отправить...

Но после этого модуля программа все-равно закрывается... Можно ли ПРОИГНОРИРОВАТЬ(обработать/записать в файл) ошибку в методе но не закрывать окно/программу? Не нравится что заполнив кучу полей клиент нажимает редкую (не доделаную) кнопочку и должен набирать все заново перезапустив программу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2014, 06:36
Ответы с готовыми решениями:

Сортировка и обновление данных не закрывая программу
Всем привет. Возникло несколько вопросов: 1) Как можно отсортировать по убыванию в DataGrid...

Отловить любую ошибку
Возможно ли как-нибудь отловить любую ошибку выдаваемую приложением? Например, если не существует...

Написать программу, в которой порожденный процесс запускает на исполнение новую (любую) программу.
мне нужно было сделать программу в которой порожденный процесс запускал на исполнение новую (любую)...

Обработать ошибку try except
try ... except on e:Exception do if (Pos('Closed Gracefully',e.Message)>0) or (Pos('Socket...

9
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
12.02.2014, 17:36 2
Tester64, может Вам поможет ACRA , но я не уверен, что это точно поможет (это система оповещения о crash'ах).

А ещё можно попробовать так.

Java
1
2
3
4
5
6
7
public class ChildActivity extends BaseActivity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int a=1/0;
}}
где

Java
1
2
3
4
5
6
7
8
9
10
11
public class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
            Log.e("Alert","Some exception");
        }
    });
}}
setDefaultUncaughtExceptionHandle
1
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
12.02.2014, 17:46 3
Нет, конечно.
Как вы себе это представляете? Например, программа получила Error (не Exception!), и все, тут уже ничего не поможет.
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
12.02.2014, 17:49 4
Netscape, Вы не совсем правы. А как же например OutOfMemoryError при decode bitmap?
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
12.02.2014, 18:05 5
YuraAAA, окей, может я не совсем удачно выразился, а может и не прав.
Когда мы получаем OOM, это значит, что память кончилась, и больше нам не выделят.
Что делать дальше? Не создавать новых объектов - толку тогда от того что мы словили эту ошибку, попросить gc очистить память - не факт, что он нас послушает?

Добавлено через 3 минуты
А ведь есть еще нейтив, который сразу крэшит VM.
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
12.02.2014, 18:37 6
Netscape, ну да. Тогда да) Попросить GC и просто не декодить картинку. Ну или как вариант WeakReference<Bitmap>
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
12.02.2014, 18:37  [ТС] 7
2YuraAAA: Спасибо. Попробую...

Цитата Сообщение от Netscape Посмотреть сообщение
Нет, конечно.
Как вы себе это представляете? Например, программа получила Error (не Exception!), и все, тут уже ничего не поможет.
Не вижу разницы между Error(?) и Exception...
Представляю себе как глобальный try на каждый метод. Например обработку на нажатие кнопки. Что-бы внутри обработки не случилось(деление на ноль, ошибка записи/чтения, неправильный запрос), прерваться должна только ЭТА обработка, а не закрыться вся форма (или вся программа).

Пока не представляю себе как, но сильно привык к подобному в винде. А на сложных программах это просто необходимо... Как и теоретически на программах разрабатывамых КОМАНДАМИ программистов - "я не могу отвечать за ошибки соседа - моя часть не глючит - платите мне зарплату"
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
12.02.2014, 18:44 8
Цитата Сообщение от Tester64 Посмотреть сообщение
Не вижу разницы между Error(?) и Exception...
В таких случаях, обращаемся к докам:
http://docs.oracle.com/javase/... Error.html
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
Цитата Сообщение от Tester64 Посмотреть сообщение
А на сложных программах это просто необходимо... Как и теоретически на программах разрабатывамых КОМАНДАМИ программистов - "я не могу отвечать за ошибки соседа - моя часть не глючит - платите мне зарплату"
Именно для этого и пишут тесты.
0
3 / 3 / 1
Регистрация: 18.09.2013
Сообщений: 19
13.02.2014, 11:54 9
Цитата Сообщение от Netscape Посмотреть сообщение
Именно для этого и пишут тесты.
Реальность такова, что охватить все большое приложение тестами, не представляется возможным.
Стоимость и время разработки сильно увеличивается. Кроме того все варианты ошибок тестами не перекроешь.

А в общем то, я считаю, что любую ошибку приложения разработчик должен иметь возможность перехватить.
Как бы там красиво не рассуждали в документации, это недостаток.
Приложения становяться все сложнее. Падение в одном модуле не значит, что все приложение не валидно.
Например, пользователь набрал большой текст, хочет выполнить какую-нибудь комманду, не связанную с текстом, а приложение падает. Текст потерян.
Так вот пользователю наплевать, как красиво мы рассуждали про правильность разделения по типам ошибок и
какую красивую архитектуру мы построили.
Потому что ПОЛЬЗОВАТЕЛЬ ВСЕГДА ПРАВ!
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
13.02.2014, 17:44  [ТС] 10
Цитата Сообщение от YuraAAA Посмотреть сообщение
А ещё можно попробовать так
Не помогло! Все что это делает - перед вылетанием выводит сообщение. Причем ТОЛЬКО в той форме где было определено в OnCreate. На другие активити не распространяется. У меня как раз так-же было перехвачено раньше. Просто класс был покруче и мог получать полный текст ошибки и отсылать его. Но завершение программы пресечь не получается.

Цитата Сообщение от vladimirsky Посмотреть сообщение
Например, пользователь набрал большой текст
Теоретически стоило бы сохранять по таймеру этот текст, но конечно логичнее будет пресечь зависание. Конечно можно КАЖДЫЙ метод начинать и заканчивать try{ } catch (Exception e) {OnError("ERROR! "+e.toString())} но когда методов сотни...

Цитата Сообщение от YuraAAA Посмотреть сообщение
может Вам поможет ACRA
Насколько я понял это тот-же обработчик, но с отправкой ошибки на гугл-док. Предпочитаю не оповещать гугл о своих ошибках!
0
13.02.2014, 17:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2014, 17:44
Помогаю со студенческими работами здесь

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

Обработать ошибку
http://************/8fuw7j Подскажите как обработать ошибку именно 500? как catch надо записать? ...

Как обработать ошибку
В общем если пользователь вводит не верный ник, Api возвращает. { &quot;error&quot;: &quot;Player Not...

IdTCPClient обработать ошибку
Привет, как в IdTCPClient обрабатывать ошибки ? в TCPClient был ErrorCode. Для примера, как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru