Intereting Posts
Ошибка: не удалось открыть zip-файл. Кэш зависимостей Gradle может быть поврежден Символьная кодировка по умолчанию для Android Как узнать, какой вид внутри определенного элемента ListView был нажат Включите несколько страниц на одной странице в JQuery mobile ViewPager OnItemClickListener Как я могу установить тень представления только по сторонам для просмотра с увеличением WebView в ScrollView: «Просмотр слишком большой, чтобы вписаться в кеш-файл» – как переделать макет? Как загрузить YouTubePlayer с помощью YouTubePlayerFragment внутри другого фрагмента? (Android) Как Admob определяет текстовый контекст для показа целевых рекламных объявлений? Автоматическое соединение Bluetooth с сопряженными устройствами Создать индексированный столбец в sqlite Android Studio – проблема с Android SDK на Windows 7 RecyclerView: обнаружена несогласованность. Недопустимая позиция позиции Поведение imeOptions, imeActionId и imeActionLabel Меню гамбургера вращается по стрелке на новую активность

Пропустить исключение в качестве посылки

Я пытаюсь передать исключение в действие, предназначенное для выгрузки соответствующей информации на экран.

В настоящее время я передаю его через связку:

try { this.listPackageActivities(); } catch (Exception e) { Intent intent = new Intent().setClass(this, ExceptionActivity.class).putExtra("Exception", e); startActivity(intent); } 

Но когда он доберется туда:

 if (!(this.bundle.getParcelable("Exception") != null)) throw new IndexOutOfBoundsException("Index \"Exception\" does not exist in the parcel." + "/n" + "Keys: " + this.bundle.keySet().toString()); 

Это сладкое исключение бросается, но когда я смотрю на keySet и подробности о пакете, он говорит мне, что есть один предмет с ключом с именем «Исключение».

Я понимаю, что это имеет какое-то отношение к типам, но я не понимаю, что я делаю неправильно. Я просто хочу сбросить информацию об исключении, любое исключение на экран. Есть ли способ сделать это без необходимости уплотнять всю информацию в строку каждый раз?

Solutions Collecting From Web of "Пропустить исключение в качестве посылки"

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

Добавить:

 Throwable exception = new RuntimeException("Exception"); Bundle extras = new Bundle(); extras.putSerializable("exception", (Serializable) exception); Intent intent = new Intent(); intent.putExtras(extras); 

Чтобы получить:

 Bundle extras = intent.getExtras(); Throwable exception = (Throwable) extras.getSerializable("exception"); String message = exception.getMessage(); 

Класс Exception не реализует интерфейс Parcelable. Если андроид не нарушает некоторые фундаментальные Java-конструкции, о которых я не знаю, это означает, что вы не можете поместить исключение в виде пакета в пакет.

Если вы хотите «передать» действие на новое действие, просто объедините его аспекты, которые вам понадобятся в новом действии. Например, допустим, вы просто хотите передать сообщение об исключении и стек. Вы бы так подумали:

 Intent intent = new Intent().setClass(this,ExceptionActivity.class) intent.putExtra("exception message", e.getMessage()); intent.putExtra("exception stacktrace", getStackTraceArray(e)); startActivity(intent); 

Где getStackTraceArray выглядит так:

 private static String[] getStackTraceArray(Exception e){ StackTraceElement[] stackTraceElements = e.getStackTrace(); String[] stackTracelines = new String[stackTraceElements.length]; int i =0; for(StackTraceElement se : stackTraceElements){ stackTraceLines[i++] = se.toString(); } return stackTraceLines; }