surtic
Erfahrenes Mitglied
- 19
Guten Tag Zusammen,
Ich bin zurzeit meine erste App am Entwickeln. Da ich mit Java noch nicht so erfahren bin stehe ich nun etwas an.
Die Ausgangslage ist so das ich einen RSS Feed mit SAX XMLReader und einem ContentHandler Parse, aber danach komme ich nicht an die abgefüllten werte wieder ran.
Ausschnitte aus dem Code:
Hier der ContentHandler
Und von hier aus wird er aufgerufen.
Nun krieg ich ja keinen Return wert über "xmlReader.parse(in);" aber um die Daten weiter aufzubereiten und auch für die Darstellung in einer View brauche ich ja die Daten also besser gesagt nur den "RSSFeed rssFeed" aus dem ContentHandler.
Wie kriege ich das am besten hin? Natürlich kann ich mir auch vorstellen das ich irgend was übersehe
Danke für eure Hilfe.
Ich bin zurzeit meine erste App am Entwickeln. Da ich mit Java noch nicht so erfahren bin stehe ich nun etwas an.
Die Ausgangslage ist so das ich einen RSS Feed mit SAX XMLReader und einem ContentHandler Parse, aber danach komme ich nicht an die abgefüllten werte wieder ran.
Ausschnitte aus dem Code:
Hier der ContentHandler
Code:
public class RSSFeedContentHandler implements ContentHandler {
protected String currentValue;
protected RSSFeed rssFeed;
protected ArrayList<RSSItem> rssItems = new ArrayList<RSSItem>();
protected RSSItem rssItem;
protected Boolean insideItemElement = false;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
currentValue = new String(ch, start, length);
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if ( localName.equals("channel") ){
this.rssFeed = new RSSFeed();
} else if ( localName.equals("item") ) {
this.insideItemElement = true;
this.rssItem = new RSSItem();
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ( insideItemElement == false ) {
if ( localName.equals("title") ) {
this.rssFeed.setTitle(currentValue);
} else if ( localName.equals("link") ) {
if ( this.rssFeed.getLink() == null ) {
this.rssFeed.setLink(currentValue);
}
} else if ( localName.equals("description") ) {
this.rssFeed.setDescription(currentValue);
} else if ( localName.equals("language")) {
this.rssFeed.setLanguage(currentValue);
} else if ( localName.equals("pubDate")) {
this.rssFeed.setPubDate(currentValue);
}
} else {
if ( localName.equals("item") ){
if ( this.rssItem != null ) {
this.rssItems.add(this.rssItem);
}
} else if ( localName.equals("title") ) {
this.rssItem.setTitle(currentValue);
} else if ( localName.equals("description") ) {
this.rssItem.setDescription(currentValue);
} else if ( localName.equals("pubDate") ) {
this.rssItem.setPubDate(currentValue);
} else if ( localName.equals("channel") ){
this.rssFeed.setItem(this.rssItems);
}
}
}
Und von hier aus wird er aufgerufen.
Code:
private void pars(InputSource in) throws SAXException, IOException {
System.setProperty("org.xml.sax.driver","org.xmlpull.v1.sax2.Driver");
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(new RSSFeedContentHandler());
xmlReader.parse(in);
}
Nun krieg ich ja keinen Return wert über "xmlReader.parse(in);" aber um die Daten weiter aufzubereiten und auch für die Darstellung in einer View brauche ich ja die Daten also besser gesagt nur den "RSSFeed rssFeed" aus dem ContentHandler.
Wie kriege ich das am besten hin? Natürlich kann ich mir auch vorstellen das ich irgend was übersehe
Danke für eure Hilfe.
Zuletzt bearbeitet: