2013-04-07 3 views
0

Ceci est une suite de la question de ma précédente question ici: RSS Reader NullPointerExceptionRSS Reader ne reçoit pas des balises

Dans mon application, dans ma liste, parfois je ne comprends pas le titre du RSS, et parfois description (et l'image). Le plus étrange ici est que je n'ai pas de problème avec tous les liens. Par exemple, si je pars le lien du tutoriel original (http://www.mobilenations.com/rss/mb.xml) tout fonctionne bien. Mais quand j'utiliser un autre lien que j'ai le problème ci-dessus ...

C'est ma classe DOMParser:

package com.td.rssreader.parser; 

import java.net.MalformedURLException; 
import java.net.URL; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.jsoup.Jsoup; 
import org.jsoup.select.Elements; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

public class DOMParser { 

    private RSSFeed _feed = new RSSFeed(); 

    public RSSFeed parseXml(String xml) { 

     // _feed.clearList(); 

     URL url = null; 
     try { 
      url = new URL(xml); 
     } catch (MalformedURLException e1) { 
      e1.printStackTrace(); 
     } 

     try { 
      // Create required instances 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 

      // Parse the xml 
      Document doc = db.parse(new InputSource(url.openStream())); 
      doc.getDocumentElement().normalize(); 

      // Get all <item> tags. 
      NodeList nl = doc.getElementsByTagName("item"); 
      int length = nl.getLength(); 

      for (int i = 0; i < length; i++) { 
       Node currentNode = nl.item(i); 
       RSSItem _item = new RSSItem(); 

       NodeList nchild = currentNode.getChildNodes(); 
       int clength = nchild.getLength(); 

       // Get the required elements from each Item 
       for (int j = 1; j < clength; j = j + 2) { 

        Node thisNode = nchild.item(j); 
        String theString = null; 

         if (thisNode != null && thisNode.getFirstChild() != null) { 
          theString = thisNode.getFirstChild().getNodeValue(); 
         } 


        if (theString != null) { 

         String nodeName = thisNode.getNodeName(); 

         if ("title".equals(nodeName)) { 
          // Node name is equals to 'title' so set the Node 
          // value to the Title in the RSSItem. 
          _item.setTitle(theString); 
         } 

         else if ("description".equals(nodeName)) { 
          _item.setDescription(theString); 

          // Parse the html description to get the image url 
          String html = theString; 
          org.jsoup.nodes.Document docHtml = Jsoup 
            .parse(html); 
          Elements imgEle = docHtml.select("img"); 
          _item.setImage(imgEle.attr("src")); 
         } 
//description 
         else if ("pubDate".equals(nodeName)) { 

          // We replace the plus and zero's in the date with 
          // empty string 
          String formatedDate = theString.replace(" +0000", 
            ""); 
          _item.setDate(formatedDate); 
         } 


         if ("link".equals(nodeName)) { 
          // Node name is equals to 'title' so set the Node 
          // value to the Title in the RSSItem. 
          _item.setLink(theString); 
         } 
        } 
       } 

       // add item to the list 
       _feed.addItem(_item); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // Return the final feed once all the Items are added to the RSSFeed 
     // Object(_feed). 
     return _feed; 
    } 

} 

Répondre

1

Une fois que vous bouclant le à travers les nœuds de poste, vous avez alors une autre boucle qui tente de parcourir les éléments enfant (pour définir le titre, la description, etc.).

Mais vous boucle commence à l'index 1 et augmente de 2:

// Get the required elements from each Item 
      for (int j = 1; j < clength; j = j + 2) { 

Cela signifie qu'il ne vérifie que la position 1,3,5, etc

regardant le xml affiché, qui montre pourquoi vous obtenez des données différentes chaque article. Réglez la boucle pour indexer à 0 et augmenter de seulement 1.

+0

VOUS ÊTES LE MEILLEUR !! J'ai cherché des heures ici !!!! :) MERCI beaucoup mate !!!! :) –

Questions connexes