1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

throw "zu schnell"

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von AquaBall, 14.04.2012.

  1. AquaBall, 14.04.2012 #1
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    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

    Beiträge:
    1,292
    Erhaltene Danke:
    136
    Registriert seit:
    20.08.2010
    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

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    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

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    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

    Beiträge:
    1,292
    Erhaltene Danke:
    136
    Registriert seit:
    20.08.2010
    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

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    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

    Beiträge:
    1,292
    Erhaltene Danke:
    136
    Registriert seit:
    20.08.2010
    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

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    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

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Du kannst dir eine ShowErrorActivity machen und auf mit einem Intent auf diese weiterleiten. Das müsste eigentlich gehen.
     

Diese Seite empfehlen