throw "zu schnell"

A

AquaBall

Fortgeschrittenes Mitglied
2
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.)
 
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.
 
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?!
 
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.
 
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.
 
Dann sind wir ja eh einer Meinung. Geb ich die völlig recht:
das Werfen von Exceptions tunlichst vermeiden! das zeigt von einen schlechten Programmierstil.
Mach ich auch nur in der Entwicklungsphase, weil der Benutzer ja sonst gar nicht damit umgehen kann.
Aber mein Problem war ja ein anderes.
 
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.
 
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:
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'?
 
Du kannst dir eine ShowErrorActivity machen und auf mit einem Intent auf diese weiterleiten. Das müsste eigentlich gehen.
 

Ähnliche Themen

S
Antworten
0
Aufrufe
578
Sergio13
S
A
Antworten
1
Aufrufe
571
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.388
jogimuc
J
Zurück
Oben Unten