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

IOExection Ereignis abfragen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von snowman2, 09.12.2011.

  1. snowman2, 09.12.2011 #1
    snowman2

    snowman2 Threadstarter Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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
     
  2. Unicate, 09.12.2011 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Meinst du sowas:

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

    ?
     
  3. snowman2, 11.12.2011 #3
    snowman2

    snowman2 Threadstarter Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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.
     
  4. mradlmaier, 11.12.2011 #4
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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: 11.12.2011
  5. snowman2, 11.12.2011 #5
    snowman2

    snowman2 Threadstarter Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Das muss ich mir mal anschauen, evtl. ist es das was ich suche.
     
  6. mradlmaier, 11.12.2011 #6
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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.
     
  7. snowman2, 12.12.2011 #7
    snowman2

    snowman2 Threadstarter Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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.
     
  8. snowman2, 16.12.2011 #8
    snowman2

    snowman2 Threadstarter Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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: 16.12.2011
  9. mradlmaier, 16.12.2011 #9
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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.
     
  10. snowman2, 16.12.2011 #10
    snowman2

    snowman2 Threadstarter Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    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.
     
    Zuletzt bearbeitet: 16.12.2011
  11. mradlmaier, 17.12.2011 #11
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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 von einem Moderator bearbeitet: 17.06.2015

Diese Seite empfehlen