2011-01-02 3 views
0

J'utilise SAX et le lecteur XML pour lire les informations météo XML sur le Web et cela fonctionne correctement si la page existe. Mais si par exemple l'utilisateur entre une ville invalide, zip etc. la page XML qui est lue est vide et la force de l'application se ferme avec nullpointerexception. La zone qui génère l'erreur est ici à l'entrée des flux ouverts. Des suggestions ?:Erreur Java Java traitant le fichier XML

  SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = null; 
      try { 
       sp = spf.newSAXParser(); 
      } catch (ParserConfigurationException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      /* Get the XMLReader of the SAXParser we created. */ 
      XMLReader xr = null; 
      try { 
       xr = sp.getXMLReader(); 
      } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      /* Create a new ContentHandler and apply it to the XML-Reader*/ 
      WeatherHandler myExampleHandler = new WeatherHandler(); 
      xr.setContentHandler(myExampleHandler); 

      /* Parse the xml-data from our URL. */ 
      try {  
       xr.parse(new InputSource(url.openStream())); 
        parsedWeatherDataSet = 
         myExampleHandler.getParsedData();    
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return parsedWeatherDataSet.toString(); 

Répondre

0

Comment ne pas attraper toutes les exceptions, mais gérer certains d'entre eux?

Avoir une URL incorrecte est assez commun. Faites les vérifications appropriées et affichez une boîte de message ...

+0

Je vais le faire aussi :) – Paul

+0

désolé pour avoir déclaré l'évidence – mtraut

0

Si vous les obtenez sur le Web, vous utilisez probablement des requêtes HTTP, qui ont des codes de réponse qui vous indiquent si la requête a réussi. Voir http://en.wikipedia.org/wiki/List_of_HTTP_status_codes et faites ce que vous faites déjà si c'est un 200, et informer l'utilisateur d'une manière appropriée si elle est autre chose (dans ce cas, il est peut-être 404)

+0

Salut ce n'est pas un 404. par exemple, voici un exemple http://a7789773896.api.wxbug.net/getForecastRSS.aspx?ACode= A7789773896 & zipCode = 10d303 & UnitType = 0 & OutputType = 1 – Paul

+0

Cela devrait être un 404, ou peut-être un 204 (pas de contenu). C'est carrément mal conçu, franchement, car ce serait vraiment utile dans cette situation si on utilisait les codes de réponse. Je suppose que vous avez juste besoin de vérifier si le contenu est la chaîne vide (ou tout-espace) avant d'essayer de l'analyser. – MatrixFrog

+0

Comment vérifier avant? J'essaie après mais obtiens l'exception nullpointer – Paul

0

Résolu:

Plutôt que : return parsedWeatherDataSet.toString(); en bas

J'ai créé une chaîne dans la partie try et l'ai renvoyée à la place. Cela l'a résolu. Salutations pour toutes les suggestions