tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
405
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    andy72 andy72 ist offline Mitglied Platin
    Registriert seit
    Oct 2006
    Ort
    München
    Beiträge
    655
    Hi @all,

    habe mal wieder angefangen mit Java zu programmieren und komme nicht weiter:
    Versucht meine App auf das Internet zuzugreifen ohne daß eine Verbindung besteht, kommt eine IO-Exception mit "Unknown Host" - soweit ja klar und auch Verständlich, und ich hab das ganze auch mit try/catch/finally abgearbeitet.

    Leider beendet sich meine App unter Android somit - was meine Frage aufwirft:
    Kann man Exceptions auch abhandeln ohne daß eine App dabei beendet wird ?
    Wie prüft man am besten ab, ob eine Verbindung besteht ?

    Bei mir läuft das ganze in einem TimerTask ab, der alle 30 Minuten versucht eine Verbindung aufzubauen.

    Danke & LG
    Andy
     

  2. #2
    Avatar von miffi
    miffi miffi ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Ravensburg (BW)
    Beiträge
    139
    Howdie.

    Da ich noch nie für Android programmiert habe, erstmal eine Frage:
    Läuft das unter J2ME oder der normalen J2SE?

    Der Sinn von Exception-Handling ist ja eigentlich der, dass man auf Fehler reagieren kann und nicht gleich die Applikation abschmiert... Daher finde ich es seltsam, was da bei dir passiert. Wird vielleicht ein Error geworfen statt einer Exception? Und was machst du in den catch/finally-Blöcken? Vielleicht wird hier nochmals ein Fehler ausgelöst durch ein close() oder ähnliches.

    Wenn ich mit Kommunikations-Protokollen arbeite (egal ob zu Hardware oder ins Netzwerk), prüfe ich die Verdindung manchmal ebenfalls durch zyklisches Polling, so wie du. Hierbei ist allerdings problematisch, dass die Verbindung nicht garantiert noch vorhanden ist, wenn du dann eine Abfrage o.Ä. darüber senden willst.
    Daher habe ich für solche Projekte inzwischen meistens eine State-Machine am Laufen. Finde ich persönlich einfacher, Dinge wie Synchronisation zwischen TimerTask, Threads oder sowas fallen weg.

    Gruß
    miffi
     
    "A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
    Douglas Adams

  3. #3
    andy72 andy72 ist offline Mitglied Platin
    Registriert seit
    Oct 2006
    Ort
    München
    Beiträge
    655
    Hossa,

    erstmal Danke für Deine schnelle Antwort.

    Ich rufe am Anfang der Funktion eigentlich nur eine Url auf:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    try {
      URL u = new URL("http://irgendwas.de");
      HttpURLConnection conn = (HttpURLConnection)u.openConnection();
    .......
      // irgendwann wenn alles verarbeitet ist:
      conn.close();
    }
    catch(MalformedURLException mue) {
      mue.printStackTrace();
    }
    catch(IOException ioe) {
     ioe.printStackTrace();
    }
    finally {
      // verarbeite daten der URL
    }

    Die App kommt so bis zur IOException und wird danach beendet: "Unknown Host".
    Ob das unter Android normal weiß ich leider nicht, auch nicht ob da mit J2SE oder J2ME gearbeitet wird: sieht man das irgendwie/irgendwo ?

    PS:
    Viellt. kann es ja sein, dass die App wegen dem "conn.close()" abschmiert, weil ja gar keine Verbindung offen ist ?

    LG & Danke
    Geändert von andy72 (11.10.10 um 15:21 Uhr)
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von andy72 Beitrag anzeigen
    Ich rufe am Anfang der Funktion eigentlich nur eine Url auf:
    [code]
    try {
    URL u = new URL("http://irgendwas.de");
    HttpURLConnection conn = (HttpURLConnection)u.openConnection();
    .......
    // irgendwann wenn alles verarbeitet ist:
    conn.close();
    }
    catch(MalformedURLException mue) {
    mue.printStackTrace();
    }
    catch(IOException ioe) {
    ioe.printStackTrace();
    }
    Das hängt davon ab, wo genau die Exception auftritt .....

    Ist eine der beiden Zeilen
    Code java:
    1
    2
    
    URL u = new URL("http://irgendwas.de");
    HttpURLConnection conn = (HttpURLConnection)u.openConnection();
    dann ist möglicherweise die Adresse falsch !

    Ich validiere sie immer mit folgendem Code:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    boolean validateUrl( URL url ) 
    {
        boolean bLoadOK = true;
        HttpURLConnection httpcon = null;
        int responsecode = -1;
        if ( (bLoadOK) && (url != null)) {
          try {
            String strTheHostIP = InetAddress.getByName(url.getHost()).getHostAddress() ;
            String strTheHostname = InetAddress.getByName(url.getHost()).getHostName();
            int thePort = url.getPort();
            String thePath = url.getPath();
            URL theURL = null;
            if (thePort == -1){
              theURL = new URL("http://" + strTheHostIP + thePath);
            } else {
              theURL = new URL("http://" + strTheHostIP + ":" + thePort + thePath);
            }
            httpcon = (HttpURLConnection) theURL.openConnection();
            httpcon.setRequestProperty( "Host", strTheHostname);
            responsecode = httpcon.getResponseCode();
          }
          catch (IOException ex1) {
            bLoadOK = false;
          }
        }
        if (responsecode != java.net.HttpURLConnection.HTTP_OK) // 200 -> HTTP_OK
        {
          bLoadOK = false;
        }
        else
        {
          bLoadOK = true;
        }
        return bLoadOK;
    }

    Andernfalls tritt der Fehler in
    Code java:
    1
    
    ..........
    auf

    Dann solltest Du da mal schrittweise mit dem Debugger durchgehen, um die genaue Zeile zu ermitteln !

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    Avatar von miffi
    miffi miffi ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Ravensburg (BW)
    Beiträge
    139
    Howdie.

    Klaus hat eigentlich alles bereits ausreichend erläutert.
    Das einzige, was ich dir noch empfehlen möchte, ist eine Erweiterung des try-catch-Blocks: Bei so kritischen und vielfältigen Operation, wie es hier der Fall ist, können einige Fehler auftreten. Ich würde immer ans Ende der spezifischen Exception-Catcher einen allgemeinen catch(Exception e)-Block setzen. Dann ist garantiert, dass auch bei nicht geplanten Fehlern nicht gleich die Applikation hängt. Außerdem bringt der Strack-Trace vielleicht auch ein wenig Licht in die Sache.

    Die Methode conn.close() schließt eigentlich nur den Stream der Verbindung... Weiß jetzt grad nicht, ob dadurch eine Exception ausgelöst wird, nur ein boolean zurückgegeben wird oder gar nichts passiert.

    Gruß
    miffi
    Geändert von miffi (11.10.10 um 19:51 Uhr)
     
    "A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
    Douglas Adams

  6. #6
    andy72 andy72 ist offline Mitglied Platin
    Registriert seit
    Oct 2006
    Ort
    München
    Beiträge
    655
    Danke Ihr 2 beiden,

    hat sich erledigt: Ich hab das URL-Object versehentlich außerhalb eines anderen try/catch (für XML/SAX) instanziert - war nicht ganz so clever von mir Habe die try/catch Blöcke nun zusammengeführt und nun steigt meine App auch nicht mehr aus bei einem Fehler

    LG & Danke nochmal
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 12.08.10, 20:46
  2. Frage zu einer Exception
    Von Maik20 im Forum Java
    Antworten: 1
    Letzter Beitrag: 15.05.09, 20:49
  3. Frage zu Exception
    Von Shizzl_chrizzl im Forum Java
    Antworten: 1
    Letzter Beitrag: 21.01.05, 14:56
  4. Exception Frage
    Von NRFi im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 20.01.05, 10:48
  5. XP-PC aufgehangen, Machine Check Exception, Frage zu DMP-Dateien.
    Von wackelpudding im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 10.08.03, 11:38