2014-12-25 2 views
0

Я пытаюсь интегрировать Facebook в свое приложение, поэтому я выполнил все инструкции. При запуске, после завершения события onResume, я получаю исключение, которое я не могу уловить из своего кода.Android - общий обломок исключения

Есть ли способ установить общий ловушка исключения, неважно, что он его поймает?

Эмулятор не выбрасывает никаких исключений вообще, так что я не могу использовать его для этого

Обновление: Я нашел его здесь: Using Global Exception Handling on android

ошибка пришла от самого Facebook, и это связано работать с proguard

+0

Пожалуйста, разместите свой код и выведите логарифм. –

+0

Код в точности такой, как показано здесь: https://developers.facebook.com/docs/android/login-with-facebook/v2.2, но мой вопрос является общим, я хочу знать, как вообще поймать любое исключение независимо от того, где это происходит. Я хочу, чтобы в одном месте было какое-то исключение. Благодарю. – Amos

ответ

0

Существует базовый класс исключения. Поэтому, если вы сделаете так:

try { 
    ...anything... 
}catch(Exception e) { 
e.printStackTrace(); 
} 

вы поймаете любое исключение, которое вызывается любым методом, вызванным из блока try. Но помните, что исключения не всегда бросаются. Иногда нет результата для возвращения или чего-то еще.

+0

Я пробовал это, а также записывал в файл все шаги, которые происходят. Когда он заканчивает событие onResume, он выдает исключение, но, похоже, оно происходит извне моего фактического кода. Если у меня может быть 1 место, чтобы поймать все исключения, которые происходят в моем приложении, это будет очень полезно. – Amos

+0

Я могу вас разочаровать, но исключения отбрасываются методами. Точка, где выбрано исключение, - это точка останова; это означает, что исключение должно быть обработано прямо здесь, прямо сейчас; ни один другой код не может это сделать.Поэтому, независимо от ваших методов и любых исключений, которые они бросают, каждый метод, потенциально бросающий исключения, должен быть окружен try/catch. Также имейте в виду, что обработка исключений базовым классом Exception - последнее, что нужно сделать. Обрабатывайте их по типу, соответствующему выводу stacktrace. –

+0

подождите, вы сказали «вне моего фактического кода». Может быть, это исключение во время выполнения? то мне нужна твоя полная стек, нечего сказать. –

1

Класс Throwable является суперклассом всех ошибок и исключений на языке Java.

Если вы поймаете throwable, вы можете поймать все виды ошибок и исключений.

try { 
    // code 
} catch(Throwable e) { 
    // handle throwable 
} 

Однако это сильно не рекомендуется и плохая практика/дизайн. Вы никогда не должны ловить общие ошибки и исключения. Вы должны проанализировать свое конкретное исключение и решить проблему, а не просто игнорировать ее с помощью try/catch!

+0

Я не говорю об общем обработчике типа исключения, я ищу одно место, чтобы поймать их всех, и там я могу различать фактический тип исключения и действовать соответствующим образом. Я знаю, что это плохая практика, но это единственный способ для меня сейчас, поймать место, где это происходит, потому что простых предложений try/catch просто не будет. – Amos

1

попробовать это решение:

  1. создать класс, который implement Thread.UncaughtExceptionHandler (этот класс будет обрабатывать с uncaughtExceptions), позволяет называть этот класс ExceptionHandler.
  2. создать класс, который extends Application, позволяет назвать этот класс App, и не забудьте указать это в файле манифеста под тег приложения: android:name="your_package_path.App"
  3. в вашем классе App переопределить метод onCreate(), и добавьте эту строку : Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
Смежные вопросы