IOExection Ereignis abfragen

snowman2

snowman2

Fortgeschrittenes Mitglied
19
Hallo,

ich möchte auf eine Exception, je nach Auslöser, unterschiedlich reagieren. Wie kann ich das bewerkstelligen?

Code:
try{
}catch(IOException e){
  Log.e("Test",e.toString); // So kann ich den Text des Auslösers ausgeben
  // ich möchte aber so etwas in der Art
  switch (e.code){
    cast e.CONNECTION_REFUSED:
       ....
       break;
  }
}

Ich weiß das der Code so nicht funktioniert aber wie stelle ich es an das es mit dem "switch" funktioniert?

ciao
Martin
 
Meinst du sowas:

PHP:
...
} catch (Exception e) {
    if(e instanceof IOException) {
        // do smth
    }
}

?
 
Ich bekomme ja auf jeden Fall eine IOException. Ich möchte aber auf die verschiedenen IOExceptions unterschiedlich reagieren.
Ein Möglichkeit währe den String zu vergleichen:

Code:
if (e.toString == "Fehler Text") {
}

aber evtl. gibt es eine Möglichkeit mit switch.
 
Verschiedene IOExcepction Unterklassen?
wenn Du das meinst, dann "catched" du zuerst die spezifischeren bis hoch zur allgemeinen IOException.

catch(MyIOException1 e){
// do something
}
catch(MyIOException2 e){
// do something
}
catch(IOException e){
// do something
}
 
Zuletzt bearbeitet:
Das muss ich mir mal anschauen, evtl. ist es das was ich suche.
 
Hängt natürlich davon ab, ob die Methode die im try-Block steht, entsprechende Subklassen von IOException "throwed"

Wenn das dein eigener Code ist kannst Du deine eigenen Exceptions definieren, throwen, und catchen.... wenn nicht, hast Du Pech gehabt.

Jedenfalls ist es Beste Praxis, für verschiedene Ausnahmen entsprechende Klassen zu definieren, statt Fehlertexte abzufragen.

Guck Dir mal Exception Handling in Java an - das ist eines der eleganteren Features von Java, es lohnt sich.
 
Ja werde ich machen Danke erstmal.

Ich baue eine Verbindung per Bluetooth auf und wenn dabei etwas schief geht bekomme ich die Exception. Und je nachdem was schief geht möchte ich unterschiedlich reagieren.
 
mradlmaier schrieb:
Jedenfalls ist es Beste Praxis, für verschiedene Ausnahmen entsprechende Klassen zu definieren, statt Fehlertexte abzufragen.

Ja genau, das ist ja mein Ziel nicht die Texte abzufragen. Dann wird es ja auch nichts mit dem "switch-case".
Ich habe mir jetzt mal die Exception behandlung näher angeschaut aber nicht das gefunden was ich haben möchte. Die Unterklassen abzufangen währe schon gut aber wenn ich nichts übersehen habe gibt es für meinen Fall keine Unterklasse.
Wie gesagt es geht bei mir um Bluetooth ich rufe die Methode "connect()" von "BluetoothSocket" auf. Ich bekomme dann die IOException "java.io.IOException: Service discovery failed". Habe ich die Unterklasse dafür wirklich übersehen?
Was haltet ihr davon den Hash des Exceptionstrings zu verwenden?
Code:
try{
    clientSocket.connect();
}catch (IOException e){
    if (e.getMessage().hashCode() == "Service discovery failed".hashCode()){
        // do what ever
    }
}
Ein Problem ist es natürlich, wenn vom Betriebssystem her der String auch nur in einem Bit geändert wird.
 
Zuletzt bearbeitet:
snowman2 schrieb:
Ja genau, das ist ja mein Ziel nicht die Texte abzufragen. Dann wird es ja auch nichts mit dem "switch-case".
Ich habe mir jetzt mal die Exception behandlung näher angeschaut aber nicht das gefunden was ich haben möchte. Die Unterklassen abzufangen währe schon gut aber wenn ich nichts übersehen habe gibt es für meinen Fall keine Unterklasse.
Wie gesagt es geht bei mir um Bluetooth ich rufe die Methode "connect()" von "BluetoothSocket" auf. Ich bekomme dann die IOException "java.io.IOException: Service discovery failed". Habe ich die Unterklasse dafür wirklich übersehen?
Was haltet ihr davon den Hash des Exceptionstrings zu verwenden?
Code:
try{
    clientSocket.connect();
}catch (IOException e){
    if (e.getMessage().hashCode() == "Service discovery failed".hashCode()){
        // do what ever
    }
}
Ein Problem ist es natürlich, wenn vom Betriebssystem her der String auch nur in einem Bit geändert wird.

Dafür ist der hashcode nicht gedacht und das wird vorraussichtlich nicht konsistent funktionieren.
Equals and Hash Code in Java

Bin überrascht das es da keine spezielle Exception gibt.
Bleibt die Möglichkeit das Du eine eigene Exception-Unterklasse dafürschreibst.
 
mradlmaier schrieb:
Dafür ist der hashcode nicht gedacht und das wird vorraussichtlich nicht konsistent funktionieren.
Ja, das denke ich mir schon, das der Hashcode dafür nicht gedacht ist aber was soll ich machen?

mradlmaier schrieb:
Bleibt die Möglichkeit das Du eine eigene Exception-Unterklasse dafürschreibst.
Das Problem ist aber, der Bluetooth-Stack kommt nicht von mir. Wie soll ich dann eine eigene Unterklasse schreiben?

Ich habe jetzt mal probiert ein paar von den Unterklassen zu catchen aber es wird keine von diesen ausgelöst, sondern nur die IOException. IOException ist wohl eher für Dateioperationen und Web-Operationen ausgelegt.
 
Zuletzt bearbeitet:
snowman2 schrieb:
Ja, das denke ich mir schon, das der Hashcode dafür nicht gedacht ist aber was soll ich machen?


Das Problem ist aber, der Bluetooth-Stack kommt nicht von mir. Wie soll ich dann eine eigene Unterklasse schreiben?

Ich habe jetzt mal probiert ein paar von den Unterklassen zu catchen aber es wird keine von diesen ausgelöst, sondern nur die IOException. IOException ist wohl eher für Dateioperationen und Web-Operationen ausgelegt.

Möglicherweise gibt es da ein Entwurfsmuster (Design pattern) dafür. Das Problem mit der Unterklasse passiert sicherlich anderen Leuten auch.

Bin da leider nicht sehr bewandert.

Head First Design Patterns: Amazon.de: Eric Freeman, Elisabeth Freeman, Bert Bates, Kathy Sierra, Mike Loukides: Englische Bücher

gibt es auch auf deutsch... würde aber die englische Version kaufen, die ist billiger und besser.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

B
Antworten
3
Aufrufe
1.305
swa00
swa00
M
Antworten
3
Aufrufe
702
swa00
swa00
S
  • SlayNox
Antworten
1
Aufrufe
631
swa00
swa00
Zurück
Oben Unten