1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. AquaBall, 14.04.2012 #1
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Um meine Fehler abzufangen habe ich eine standardisierte Methode, die vor dem Abbruch informieren soll.
    Code:
        private void meldeDich(String titel, String nachricht, String fehler) {
            AlertDialog ad = new AlertDialog.Builder(this).create();  
            ad.setTitle(titel); ad.setMessage(nachricht);  
            ad.setButton("OK", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int which) 
                { dialog.dismiss();  }  
            });  
            ad.show();
    // TODO dieses throw ist schneller als der dialog ?!?! 
           throw new IllegalArgumentException(fehler);
        }
    
    Aber der Dialog erscheint nicht, weil das throw "schneller" zu sein scheint, und das Programm mit dem (gewünschten) Fehler abbricht.
    (Ohne throw kommt der Dialog korrekt.)
     
  2. TheDarkRose, 14.04.2012 #2
    TheDarkRose

    TheDarkRose Gewerbliches Mitglied

    Also du willst eine Methode die einen Fehler abfängt, generierst aber selber einen Fehler. Normaleweise solltest du diese Methode im catch Teil eines try/catch Blocks aufrufen, aber selbst keinen neuen Fehler werfen.
     
  3. AquaBall, 14.04.2012 #3
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Irgendwas hast du falsch verstanden.
    Ich hab eine Methode, die einen Logikfehler, z.B. "Geschwindigkeit über 130 kmh" melden soll, und dann einen Fehler throw't.
    Aber die Meldung kommt nicht am Bildschrim an, weil noch vor dem Dialog der Error geworfen wird.
    Die Meldung sollte doch eigentlich den Programmablauf unterbrechen?!
     
  4. AquaBall, 14.04.2012 #4
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    PS: Von Try-Catch halte ich sehr wenig. Manchmal mags ja nötig sein, z.B. Datei-in/out.
    Aber im allgemeinen in ich der Meinung soll das Programm schon wissen was passieren kann.
    Einfach mal zu probieren, ob sqrt(-10) funktioniert und dann irgendwie zu reagieren, ist nicht mein Stil.
     
  5. TheDarkRose, 14.04.2012 #5
    TheDarkRose

    TheDarkRose Gewerbliches Mitglied

    ai ai ai, hab ich was von wild herum probieren gesagt? Klar prüft man ob man zuerst ob man einen gültigen wert z.b an sqrt() übergibt, trotzdem gehört das ganze in einen try-catch block, falls doch mal eine auftreten sollte, um die exception nicht an übergeordnete funktionen weiterzugeben. Das nennt man Fehlerkapselung. Selbst sollte man das werfen von Exceptions tunlichst vermeiden, dass zeigt von einen schlechten Programmierstil.
     
  6. AquaBall, 14.04.2012 #6
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Dann sind wir ja eh einer Meinung. Geb ich die völlig recht:
    Mach ich auch nur in der Entwicklungsphase, weil der Benutzer ja sonst gar nicht damit umgehen kann.
    Aber mein Problem war ja ein anderes.
     
  7. TheDarkRose, 14.04.2012 #7
    TheDarkRose

    TheDarkRose Gewerbliches Mitglied

    Dein AltertDialog wird IMHO schon aufgerufen, nur wartet die Dialog.show() Methode wahrscheinlich nicht auf das dismissen des Dialogs und somit geht deine Methode sofort zum throw weiter.
     
  8. DieGoldeneMitte, 14.04.2012 #8
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Ein Dialog.show() hält das Programm nicht an. Der Aufruf besagt nur, dass ein Dialog gerendert werden soll und setzt entsprechende Einstellungen in Eventloop um. Ich würde ja erwarten, dass der Dialog schon kommen würde, aber da der Code hinder dem show ausgeführt wird, es halt trotzdem zur Exception kommt.

    Für solche Probleme würde ich eher einen Toast nehmen.
     
    Zuletzt bearbeitet: 14.04.2012
  9. AquaBall, 15.04.2012 #9
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Danke. Genau das wars.
    HTML:
    public class Test extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.test);
    
            screenErzeugen(data);  //Wie kann ich Fehler-Dialoge hier anzeigen?
        }
    
    Der Dialog kommt nicht, weil das Layout noch gar nicht angezeigt wird.
    und der Throw bricht das Layout ab, bevor Inhalte (incl Dialog) angezeigt werden.

    Mit Toast wird nun wenigstens der Grund angezeigt.
    Heißt in der Konsequenz, dass ich in onCreate gar keinen Dialog anzeigen kann.
    Gibts so was wie ein 'afterCreate' oder 'afterDisplayed'?
     
  10. DieGoldeneMitte, 15.04.2012 #10
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Du kannst dir eine ShowErrorActivity machen und auf mit einem Intent auf diese weiterleiten. Das müsste eigentlich gehen.
     
Du betrachtest das Thema "throw "zu schnell"" im Forum "Android App Entwicklung",