Страница 1 из 1

Обработка exception

Добавлено: 17 авг 2012, 10:46
IlyaZh
Здравствуйте. Подскажите пожалуйста, можно ли обрабатывать эксцепшены? У меня есть asynctask, где выполняется загрузка данных из инета внутри конструкции

Код: Выделить всё

try {
} catch (NullPointerException e) {
e.getMessage();
}
Всё работает, если инета нет - просто ничего не загружается, но приложение работает дальше. Хочу сделать какое-либо уведомление для пользователя, типа если нет инета, то пользователь получал бы сообщение об этом, но приложение продолжало бы работать.

Пробовал внутри catch разместить следующий код - получаю exception и вылет приложения.

Код: Выделить всё

AlertDialog.Builder dialog = new AlertDialog.Builder(ToiletMapActivity.this);
	            dialog.setTitle("MyException Occured");
	            dialog.setMessage(e.getMessage());
	            dialog.setNeutralButton("Cool", null);
	            dialog.create().show();

Re: Обработка exception

Добавлено: 17 авг 2012, 10:53
rezak90
я обычно не заморачиваюсь и выкидываю тосты в кетче:
Toast.makeText(this, "Exception", Toast.LENGTH_LONG).show();

Re: Обработка exception

Добавлено: 17 авг 2012, 11:06
IlyaZh
rezak90 писал(а):я обычно не заморачиваюсь и выкидываю тосты в кетче:
Toast.makeText(this, "Exception", Toast.LENGTH_LONG).show();
С тостами вылетает. Если так, как Вы предложили, ругается IDE.
Если вместо this написать имяактивити.this, то приложение разлетается в пух и прах :)

Re: Обработка exception

Добавлено: 17 авг 2012, 11:10
rezak90
попробуй в asynctask передавать Context и заместь this вставалять context

Re: Обработка exception

Добавлено: 17 авг 2012, 11:29
KamiSempai
rezak90 писал(а):попробуй в asynctask передавать Context и заместь this вставалять context
Или использовать getApplicationContext()

Re: Обработка exception

Добавлено: 17 авг 2012, 11:31
IlyaZh
Добавил

Код: Выделить всё

Context context = getApplicationContext();
и подставляю эту переменную вместо this. Результат тот же. Или я что-то не так делаю? Как иначе передать контекст в асинктаск?

Re: Обработка exception

Добавлено: 17 авг 2012, 11:51
IlyaZh
Решил проблему. Оказывается надо было вынести все действия с UI из метода doInBackground. При эксцепшене вызываю publishProgress(-1); А затем проверяю значение в методе onProgressUpdate. Если минус единица - показываю сообщение, иначе использую это значение для прогрессбара

Re: Обработка exception

Добавлено: 17 авг 2012, 12:29
Mikhail_dev
Старайтесь писать правильно. Нет инета? Ничего тогда не загружай вообще. Ведь это более логично. Вот тут совет писал по этому поводу. Просто делаем слушатель.
http://www.cyberforum.ru/android-dev/th ... ost3297870
Правда это не всегда спасёт. Ибо бывает что подключен к WiFi, а самого инета нету. Но такое довольно редко бывает. Так что try catch будет необходим в процентах 5 случаев.

Re: Обработка exception

Добавлено: 17 авг 2012, 17:53
Finch
no-- верно сказал, логика не правильная у вас.
Код нужно писать так что6 исключений не возникало, если они есть то код не правильный! Помни это =)

п.с. меня 6ывает такое иногда когда роутер подвисает, вай фай подкл а инета нет =)

Re: Обработка exception

Добавлено: 17 авг 2012, 19:15
IlyaZh
Finch писал(а):no-- верно сказал, логика не правильная у вас.
Код нужно писать так что6 исключений не возникало, если они есть то код не правильный! Помни это =)

п.с. меня 6ывает такое иногда когда роутер подвисает, вай фай подкл а инета нет =)
Спасибо за хороший совет. сделал проверку на наличие подключения к сети.