2017-05-12 2 views
-1

Ich habe eine Android-App, die eine Anfrage an den Server stellt und eine Antwort erhält. Ich benutze Retrofit2 und OkHttp. Ich bekomme Antwort in JSOn, die dann unter Verwendung GSON geparst wird. Manchmal ist das Objekt möglicherweise null und die App stürzt ab. Ich habe eine Antwort in mehreren Fragmenten, so dass die App in irgendeinem Teil abstürzen könnte, wenn die Antwort ein Nullobjekt hat.Globale Ausnahme abfangen und App-Absturz verhindern

Also plante ich eine globale Ausnahmeerfassungsklasse, die eine Ausnahme abfängt und die App nicht abstürzt, sondern dem Benutzer ein benutzerdefiniertes Dialogfeld anzeigt, das "Call Support" sagt.

Ich möchte diesen Android Dialog "App not responding" nicht haben. Wie kann ich das erreichen? Meine App darf auf keinen Fall abstürzen, obwohl der Server sme null-Objekt sendet.

+0

Die App wird nicht abstürzen, obwohl der Server Null-Objekt sendet. Retrofit kümmert sich darum. Könnte mit Ihrer POJO-Klasse überprüft werden. –

+1

"Manchmal ist das Objekt möglicherweise null und die App stürzt ab" - validiert die Antwort vom Server und verarbeitet ungültige Daten, statt die Daten blindlings weiterzuleiten und abzustürzen. "Ich habe eine Antwort in mehreren Fragmenten, so dass die App in einem beliebigen Teil abstürzen kann, wenn die Antwort ein Nullobjekt enthält" - Zentralisieren Sie Ihren Code zum Abrufen von Daten vom Server und validieren Sie die Antwort. "Meine App darf auf keinen Fall abstürzen, obwohl der Server ein sme-Objekt sendet" - validiere dann die Antwort vom Server. Ein globaler Ausnahme-Handler ist hier keine geeignete Lösung, IMHO. – CommonsWare

Antwort

0

Der ganze Sinn, die Anwendung zum Absturz zu bringen, wenn eine Ausnahme nicht abgefangen wird, verhindert, dass die Ausführung unerwartetes Verhalten ausführt (was oft das kleinere Übel ist).

Eine nicht abgefangene Ausnahme in Ihrem Code bedeutet, dass eine Methode aufgefordert wurde, etwas zu tun, das keinen Sinn ergibt (und daher eine Ausnahme auslöst) und dass Ihr Code niemals irgendeine Methode zur Wiederherstellung dieses Zustands erwartet. Absturz der Anwendung ist das bestmögliche Verhalten.

Wenn Sie (als Entwickler) erwarten, dass der Server manchmal ein Null-Objekt sendet, sollten Sie mit Null-Objekten arbeiten, sobald dies sinnvoll ist. Wenn Sie auf einem größeren Bild erwarten, dass Ihr Messaging-Modul möglicherweise fehlschlägt und dennoch ein aussagekräftiges Verhalten für Ihre Anwendung aus dieser Situation heraus entwickelt, sollten Sie das gesamte Modul mit einem sinnvollen ExceptionHandler umschließen.

Verwandte Themen