2013-04-06

Anatomie eines unscheinbaren Fehlers

Es ist immer wieder unangenehm, wenn man in der Android Developer Console so etwas sieht:

Screenshot Android Developer Console
Screenshot Android Developer Console

Die App hat dann nämlich einen Fehler. In meinem Fall kann eine Activity nicht gestartet werden. Die Ausnahme ist insofern ungewöhnlich, als es bewährte Praxis ist, so etwas mittels try {} catch {} zu kapseln. Sollte da jemand schlampig gearbeitet haben??
Zwinkerndes Smiley

Werfen wir zunächst einen Blick auf den Stacktrace…

Screenshot Ausschnitt Stacktrace
Screenshot Ausschnitt Stacktrace

Hier wird versucht, eine E-Mail zu versenden.Und zwar nicht durch Code der App, sondern durch das System. Die letzte Zeile des Stacktrace-Ausschnitts gibt den entsprechenden Hinweis. Android kann den durch TextViews angezeigten Text auf Wunsch analysieren und beim Finden von Telefonnummern, Webadressen oder eben E-Mails mit korrespondierenden Aktionen verknüpfen. Dazu müssen in der korrespondierenden Layoutdatei nur wenige Attribute gesetzt werden.

 <TextView android:id="@+id/about_info"  
    android:paddingTop="6dip"  
    android:autoLink="web|email"  
    android:text="@string/welcome_text"  
    android:layout_below="@id/about_density"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
 />     

So sieht die Definition des auszugebenden Texts aus:

   <string name="welcome_text"><b>Thank you very   
 much for purchasing this app.   
 If you have any suggestions, please feel free  
 to contact me at kuennetht@googlemail.com.   
 </b>\n\n<b>Terms of use</b>\nThis   
 program is distributed in the hope that it will be useful,  
 ...  

Daraus wird dann zur Laufzeit:

Screenshot TKWeek-Programminfo-Seite
Screenshot TKWeek-Programminfo-Seite

Die Ausnahme Activity not found erscheint nach dem Antippen der E-Mail-Adresse. Aber nicht auf allen Geräten. Mein Nexus 4 öffnet wie erwartet den Gmail-Editor zum Erfassen und Versenden von E-Mails. Jetzt höre ich Sie schon sagen: OK, aber was passiert auf Geräten, die kein Gmail kennen? Der Emulator imitiert so ein System (keine Gmail-App). Ich möchte schon fast sagen, dummerweise, kommt hier aber:

Screenshot: Hinweis, dass eine Aktion nicht ausgeführt werden konnte
Screenshot: Hinweis, dass eine Aktion nicht ausgeführt werden konnte

Im Emulator werden Ausnahmen also sauber abgefangen und als halbwegs verständliche Nachricht an den Anwender weitergegeben.

…ich merke schon, Sie lassen nicht locker. Ihnen kommt der Gedanke, es könnte an der Android-Version liegen. Schön wär’s, aber mein Sony Xperia Tablet S hat mit Android 4.0.3 die gleiche Systemversion wie das verwendete Emulatorabbild:

Screenshot rrrrrrrummmmmssssssssss
Screenshot rrrrrrrummmmmssssssssss

…rrrruuuuuummmmmssssssss……..

Noch geben wir nicht auf. Gelegentlich kann man lesen, dass man die (nicht Gmail-) Mail-App konfigurieren muss, danach würde die Activity gefunden. In der Tat kommt danach im Emulator nicht mehr die bereits gezeigte Meldung, sondern die Activity zur Eingabe von E-Mails. Hierzu ein Screenshot – wieder Android-Emulator mit Plattformversion 4.0.3, nur ein anderer Formfaktor

Screenshot: Androids Email-App
Screenshot: Androids Email-App

Soweit so gut. Das Xperia Tablet S hat die Gmail-App an Board. Insofern scheint es widersinnig, zusätzlich noch “die andere” Email-App einrichten zu müssen. Dennoch konfigurieren wir – des Spaßes wegen – diese.

Screenshot Erfassen einer E-Mail auf dem Xperia Tablet S
Screenshot Erfassen einer E-Mail auf dem Xperia Tablet S

Es funktioniert! Raufen Sie sich bitte mit mir die Haare…
Zwinkerndes Smiley

Fassen wir unsere Erkenntnisse zusammen. Dass auf Geräten nur dann ein Editor zum Erfassen von E-Mails erscheint, wenn eine entsprechend konfigurierte App installiert ist, ist einleuchtend. Dass Emulator und echtes Gerät mit derselben Plattformversion unterschiedliches Verhalten zeigen, ist merkwürdig aber akzeptabel. Dass man als Anwender auf einem Tablet mit konfigurierter Gmail-App zusätzlich noch die “eingebaute” konfigurieren muss, macht hingegen fassungslos. Zumal – Sie erinnern sich – dies auf meinem Nexus 4 nicht nötig war. Schreiben Sie mir – was halten Sie davon?

No comments:

Post a Comment