Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
-2 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 36
1

Поймать необработанное исключение и предложить пользователю отправить детали ошибки разработчику

13.06.2016, 15:35. Показов 664. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Думаю не нужно объяснять зачем это мне надо, любой разработчик поймет суть задачи.

В общем то уже почти сделал задуманное, но маловато опыта чтобы понять что не так делаю.

Сделал обертку над Application (класс назвал MyApplication), в котором назначаю обработчик необработаннхы исключений.
В моем обработчике (см.метод handleUncaughtException) я вызываю свой BugreportActivity, где написано что произошла ошибка и вопрос "Отправить текст ошибки разработчикам?", кнопки "Нет" и "Отправить".

Если юзер жмет Нет, то программа должна закрыться. Если "Отправить", то должно создаться новое письмо в почтовой программе по-умолчанию и
прописаться Кому, Тема, Тело, чтобы юзер мог убедиться что нет каких-либо личных данных и осталось только отправить.

Буду признателен вам, если подскажите почему нажав Нет окно BugreportActivity закрывается и снова открывается.
Если опять нажать Нет - тоже самое, а с 3-го раза закроется! Но при этом Android Studio зависает, приходится снимать задачу.

Реализацию постарался написать проще некуда.
Может предложите свой вариант, буду чрезмерно признателен :-)

Для реализации задуманного делаю так:

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
public class MyApplication extends Application {
 
    @Override
    public void onCreate() {        
 
        // Setup handler for uncaught exceptions.
        Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
        {
            @Override
            public void uncaughtException (Thread thread, Throwable e)
            {
                handleUncaughtException (thread, e);
            }
        });
 
        super.onCreate();
    }
 
    public void handleUncaughtException (Thread thread, Throwable e)
    {
        Intent intent = new Intent();
        intent.setAction ("com.example.alexv.listdemo.SEND_ERR_TO_DEVELOPERS");
        intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
        startActivity (intent);
 
        System.exit(1); // kill off the crashed app
    }
}
В манифесте прописываю фильтр интента так:

XML
1
2
3
4
5
6
7
8
9
<activity android:name=".BugreportActivity">
       android:theme="@android:style/Theme.Dialog"
       android:textAppearance="@android:style/TextAppearance.Large"
       android:windowSoftInputMode="stateHidden">
       <intent-filter>
           <action android:name="com.example.alexv.listdemo.SEND_ERR_TO_DEVELOPERS" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
</activity>
Форма с предложением отправить ошибку разработчикам:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class BugreportActivity extends Activity implements View.OnClickListener {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bugreport);
    }
 
    public void btnSendClick(View view) {
        // Отсюда потом вызову создание письма ...
        System.exit(1); // убиваем тек.процесс, т.к. приложение разрушено и оно больше не нужно
    }
 
    public void btnNoClick(View view) {
        System.exit(1); // Нет так нет, убиваем процесс
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2016, 15:35
Ответы с готовыми решениями:

Кто готов предложить не большой проект junior c# разработчику (сделаю бесплатно)?
Есть огромное желание поучаствовать в OpenSource. Готов влиться в хорошую команду.

Что я сделал не так?Возникло необработанное исключение по адресу 0x7434A9F2 : исключение Microsoft C++: std
//Калькулятор Intrigger #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; ...

Поймать исключение
Почему-то не ловятся исключения: try { return a.exec(); } catch (...) { ...

Как поймать исключение в программе?
В общем, если я ловлю исключение ThreadAbortException, то надо произвести некоторые действия, но у...

1
-2 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 36
14.06.2016, 19:52  [ТС] 2
Тему закрываю. Нашел решение.

Кому интересно, сделал вызов моей активити через PendingIntent и заработало:

Java
1
2
3
4
5
6
7
8
9
10
11
12
Context context = MyApplication.this.getApplicationContext()
        Intent bugreportActivity = new Intent("com.example.alexv.listdemo.SEND_ERR_TO_DEVELOPERS");//this has to match your intent filter
        bugreportActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        bugreportActivity.putExtra("body", report.toString());
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 22, bugreportActivity, 0);
        try {
            pendingIntent.send();            
        }
        catch (PendingIntent.CanceledException ex) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
        }
0
14.06.2016, 19:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2016, 19:52
Помогаю со студенческими работами здесь

Поймать исключение в глобальном объекте
Есть глобальный объект, конструктор которого может кинуть исключение типа std::exception....

Нужно поймать исключение из api
Всем привет. Нужен совет по поводу того, как обработать исключение, которое приходит из...

Как поймать исключение в Task?
Здраствуйте! Есть код (все лишнее соответственно убрал): try { Task t1 =...

Необработанное исключение
В ассемблере новичок, интересует такой вопрос, Написанная на асме функция вызывается нормально, но...


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

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