Siemano. Mam taki problem, właściwie to dwa. Pisząc czytnik RSS chciałem zastąpić case'y polimorfizmem. Teraz, gdy odpalam program sprawa wygląda tak, że przy próbie wydrukowania wiadomości otrzymuje puste pola. Wygląda to tak:
Próbując namierzyć błąd okryłem, że każdy element(przypuśćmy tytuł) zawiera wszystkie dane jednego wiersza(czyli String odpowiedzialny za tytuł zawiera tytuł, opis, link, autora i guid. ) Próba wydrukowania Stringów powodzi się tylko w jednej metodzie, co jest zaznaczone komentarzem w moim kodzie. Wygląda to tak:
Kodu jest dużo, tym bardziej docenię każdą pomoc.
Więc kolejno:
- Main: http://4programmers.net/Pastebin/4543
- Klasa "Feed" która miała za zadanie przetrzymywać wszystkie Stringi: http://4programmers.net/Pastebin/4544
- Klasa "FeedMessage" która jest wykorzystywana do drukowania wiadomości: http://4programmers.net/Pastebin/4545
- Klasa "RSSFeedParser" - to tu właśnie najwięcej się dzieje: http://4programmers.net/Pastebin/4546
- Interfejs "Case" - po nim implementują właśnie elementy czytnika:
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
/**
* Created by Maciek on 2015-11-23.
*/
public interface Case {
void feedData(RSSFeedParser rss) throws XMLStreamException;
}
- Klasa "ITEM' - tu pewnie jest pies pogrzebany, bo przy tej klasie się męczyłem najbardziej. nie wiedziałem jak to wszystko zapisać żeby działało. wyszło co wyszło i jeśli miałbym to pisać jeszcze raz to nic bym w tym nie zmienił bo nie widzę błędu. nie widzę ale czuję.
import javax.xml.stream.XMLStreamException;
/**
* Created by Maciek on 2015-11-23.
*/
public class ITEM implements Case {
@Override
public void feedData(RSSFeedParser rss) throws XMLStreamException {
if (rss.isFeedHeader) {
rss.isFeedHeader = false;
rss.feed = new Feed(rss.title, rss.link, rss.description, rss.language, rss.copyright, rss.pubDate);
}
rss.event = rss.eventReader.nextEvent();
if (rss.event.isEndElement()) {
if (rss.event.asEndElement().getName().getLocalPart() == (rss.ITEM)) {
try {
rss.setAllElements();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
}
}
No i każda kolejna klasa wygląda tak samo, tylko że jest zmieniona nazwa Stringa:
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
/**
* Created by Maciek on 2015-11-23.
*/
public class TITLE implements Case {
@Override
public void feedData(RSSFeedParser rss) throws XMLStreamException {
rss.title = rss.getCharacterData(rss.event, rss.eventReader);
rss.eventReader.close();
}
}
To mnie przerosło.