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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

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

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

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

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

Но после этого модуля программа все-равно закрывается... Можно ли ПРОИГНОРИРОВАТЬ(обработать/записать в файл) ошибку в методе но не закрывать окно/программу? Не нравится что заполнив кучу полей клиент нажимает редкую (не доделаную) кнопочку и должен набирать все заново перезапустив программу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2014, 06:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработать любую ошибку не закрывая программу (Программирование Android):

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

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

Обработать ошибку - C#
http://prntscr.com/8fuw7j Подскажите как обработать ошибку именно 500? как catch надо записать? Добавлено через 9 минут Обработал...

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

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

Обработать ошибку idFTP - Delphi
Здравствуйте! Необходимо обработать вот такую ошибку Delphi: http://i17.***********/big/2011/0303/2d/eb7d423789190f6c888e1955850e452d.jpg ...

9
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
Netscape
374 / 361 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
12.02.2014, 17:46 #3
Нет, конечно.
Как вы себе это представляете? Например, программа получила Error (не Exception!), и все, тут уже ничего не поможет.
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
12.02.2014, 17:49 #4
Netscape, Вы не совсем правы. А как же например OutOfMemoryError при decode bitmap?
0
Netscape
374 / 361 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
12.02.2014, 18:05 #5
YuraAAA, окей, может я не совсем удачно выразился, а может и не прав.
Когда мы получаем OOM, это значит, что память кончилась, и больше нам не выделят.
Что делать дальше? Не создавать новых объектов - толку тогда от того что мы словили эту ошибку, попросить gc очистить память - не факт, что он нас послушает?

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

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

Пока не представляю себе как, но сильно привык к подобному в винде. А на сложных программах это просто необходимо... Как и теоретически на программах разрабатывамых КОМАНДАМИ программистов - "я не могу отвечать за ошибки соседа - моя часть не глючит - платите мне зарплату"
0
Netscape
374 / 361 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
12.02.2014, 18:44 #8
Цитата Сообщение от Tester64 Посмотреть сообщение
Не вижу разницы между Error(?) и Exception...
В таких случаях, обращаемся к докам:
http://docs.oracle.com/javase/7/docs/api/java/lang/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
vladimirsky
3 / 3 / 1
Регистрация: 18.09.2013
Сообщений: 19
13.02.2014, 11:54 #9
Цитата Сообщение от Netscape Посмотреть сообщение
Именно для этого и пишут тесты.
Реальность такова, что охватить все большое приложение тестами, не представляется возможным.
Стоимость и время разработки сильно увеличивается. Кроме того все варианты ошибок тестами не перекроешь.

А в общем то, я считаю, что любую ошибку приложения разработчик должен иметь возможность перехватить.
Как бы там красиво не рассуждали в документации, это недостаток.
Приложения становяться все сложнее. Падение в одном модуле не значит, что все приложение не валидно.
Например, пользователь набрал большой текст, хочет выполнить какую-нибудь комманду, не связанную с текстом, а приложение падает. Текст потерян.
Так вот пользователю наплевать, как красиво мы рассуждали про правильность разделения по типам ошибок и
какую красивую архитектуру мы построили.
Потому что ПОЛЬЗОВАТЕЛЬ ВСЕГДА ПРАВ!
0
Tester64
396 / 357 / 43
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2014, 17:44
Привет! Вот еще темы с ответами:

Обработать ошибку деления на ноль - Visual Basic
Проблема в том, что при последующих выполнениях программы выскакивает эта ошибка, в отличие от предыдущих запусков. Все переменны зависят...

Обработать ошибку деления на ноль - VBA
Подскажите, какое изменение в программу нужно ввести, чтобы при введении нуля выдавало сообщение об ошибке? Public Sub Prg_3_2() Dim x...

Обработать ошибку деления на ноль - VBA
Sub пример_2() Dim x As Single, y As Single, z As Single x = 0.17 y = 10 ^ 2 z = (((x ^ 3 - y ^ 2) ^ 5)) / (e ^ 2 * x * Log(y)) ...

При попытке открыть любую форму через конструктор, выдает ошибку - .NET
Привет! Такая проблема: При попытке открыть любую форму через конструктор, выдает ошибку по типу такой. &quot;Конструктору не удалось...


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

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

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