Autore Topic: Situazione assurda con parser RSS  (Letto 482 volte)

Offline jocker99

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy mini 2
  • Sistema operativo:
    debian 6 - 64 bit
Situazione assurda con parser RSS
« il: 01 Giugno 2013, 16:05:38 CEST »
0
Salve a tutti e vi ringrazio per il vostro prezioso aiuto,
 ho fatto una piccola app per leggere dei reader rss, questo e' il codice



Codice (Java): [Seleziona]
public class RssHeader extends DefaultHandler{
                RssFeed _feed;
        RssItem _item;
        String _lastElementName = "";
        boolean bFoundChannel = false;
        final int RSS_TITLE = 1;
        final int RSS_LINK = 2;
        final int RSS_DESCRIPTION = 3;
        final int RSS_CATEGORY = 4;
        final int RSS_PUBDATE = 5;
       
        //private CustomItem el;
        //private ArrayList<CustomItem> itemVisualizzare;
        // Number of articles added so far
        //private int itemAggiunti = 0;
       
        int depth = 0;
        int currentstate = 0;
        /*
         * Constructor
         */

        RssHeader()
        {
                 AppLog.logString("Costruttore  Header");
        }
       
        /*
         * getFeed - questo ci restituisce tutto quando il feed e' completo
         */

        RssFeed getFeed()
        {
                return _feed;
        }
       

/** Avendo imposto RssHeader come extends DefaultHandler devi implementare i suoi metodi che quindi quando
 * vengono richimati vengono eseguiti senza una richiesta esplicita, quindi questa classe quando scarica tutto il file xml
 * poi viene gestito come richiesto dai metodi che hai implementato, per maggiori info sui metodi implementabili vedi
 * [url=http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html]DefaultHandler | Android Developers[/url]  */
   
       
        public void startDocument() throws SAXException
        {
                // inizializziamo i feed, questo conterrà  gli elementi analizzati
                _feed = new RssFeed();
                // inizializziamo RssItem, useremo questo come stampella per catturare gli elementi del canale
                _item = new RssItem();

        }
        public void endDocument() throws SAXException
        {
        }
       
        // qua devi mettere tutto
        public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException
        {
                depth++;
                if (localName.equals("channel"))
                {
                        currentstate = 0;
                        return;
                }
                if (localName.equals("image"))
                {
                        // record our feed data - we temporarily stored it in the item :)
                        _feed.setTitle(_item.getTitle());
                        _feed.setPubDate(_item.getPubDate());
                }
                if (localName.equals("item"))
                {
                        // create a new item
                        _item = new RssItem();
                        return;
                }
                if (localName.equals("title"))
                {
                        currentstate = RSS_TITLE;
                        return;
                }
                if (localName.equals("description"))
                {
                        currentstate = RSS_DESCRIPTION;
                        return;
                }
                if (localName.equals("link"))
                {
                        currentstate = RSS_LINK;
                        return;
                }
                if (localName.equals("category"))
                {
                        currentstate = RSS_CATEGORY;
                        return;
                }
                if (localName.equals("pubDate"))
                {
                        currentstate = RSS_PUBDATE;
                        return;
                }
                // if we don't explicitly handle the element, make sure we don't wind up erroneously
               
               
               
        }
       
       
        /* endElement viene richiamata quando c'è la chiusura di un tag xml */
        public void endElement(String namespaceURI, String localName, String qName) throws SAXException
        {
                depth--;
                if (localName.equals("item"))
                {
                        // add our item to the list!
                        _feed.addItem(_item);
                        // aggiungo l'elemento nel record
                //      itemVisualizzare.add(el);
                        return;
                }
                 
        }
       
        private static String IsMatch(String s, String pattern) {
        try {
            Pattern patt = Pattern.compile(pattern);
             Matcher matcher = patt.matcher(s);
           
            String tmp = matcher.replaceAll("");      
        return tmp;
        } catch (RuntimeException e) {
                   return e.toString();
        }  
}
       
       

        public void characters(char ch[], int start, int length)
        {
                String theString = new String(ch,start,length);
                       
                String theString2=" ";
                String regex ="<br/>";
               
                switch (currentstate)
                {
                        case RSS_TITLE:
                                _item.setTitle(theString);

                                currentstate = 0;
                                break;
                                /*                             
                        case RSS_LINK:
                                _item.setLink(theString);
                                AppLog.logString("Link: "+theString);
                                currentstate = 0;
                                break;
                                 */
           
                               
                        case RSS_DESCRIPTION:
                                theString2=IsMatch(theString,regex);
                                _item.setDescription(theString2);
       
                                AppLog.logString(theString);
                                AppLog.logString("rss_desc:"+theString2);
                       
                                currentstate = 0;
                               
                                break;
                                       
                        default:
       
                        return;
                }
       

                               
        }



vi faccio notare che dato che all'interno dei rss ho dei caratteri <br/> uso un regex per eliminarli....
tutto funziona bena ma ho questa strana situazione il primo elemento viene sempre troncato mentre i successivi vengono visualizzati bene, ha vete delle idee in merito

esempio:  la mamma <br/> ha comprato le scarpe

se e' come primo elemento mi esce come risultato: la mamma
se e' come secondo o successivo : la mamma ha comprato le scarpe


potete aiutarmi
grazie mille
« Ultima modifica: 01 Giugno 2013, 16:11:06 CEST da jocker99 »

Offline jocker99

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy mini 2
  • Sistema operativo:
    debian 6 - 64 bit
Re:Situazione assurda con parser RSS
« Risposta #1 il: 08 Giugno 2013, 19:38:33 CEST »
0
ho constatato che il problema non si presenta sui sistemi un po' lenti tipo i vodafone..... qualcuno ha qualche idea ?

grazie mille