×
Namespaces

Variants
Actions

Leitor de RSS, usando KXml, em Java ME

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Exemplo de código
Artigo
Tradução:
Por valderind4
Última alteração feita por lpvalente em 14 Feb 2014

Neste artigo, nós costruiremos um simples leitor de RSS usando a biblioteca KXML. Você pode fazer o download do código fonte completo (incluindo um simples MIDlet de teste) aqui. Para ver o MIDlet funcionando você clicar aqui.

J2me kxml rss parser.png

Classe RssItem

Esta é a classe que representará uma simples instância do Item RSS. Neste artigo, nós apenas nos preocuparemos com o título, link e descrições dos itens do RSS, mas a inclusão de outros campos será fácil, uma vez que o processo é claro.

public class RssItem
{
public String title = null;
public String description = null;
public String link = null;
 
public RssItem()
{
}
 
public RssItem(String title, String link, String description)
{
this.title = title;
this.link = link;
this.description = description;
}
}

Classe KXmlRssParser

Esta é uma classe que atualizará os feed RSS do leitor.

O único método público será o parse(String rssUrl), aceitando a URL dos feed's RSS URL como argumento, e retornando um vetor contendo os itens RSS lidos.

public Vector parse(String rssUrl) throws Exception
{
Vector items = new Vector();
 
KXmlParser parser = new KXmlParser();
 
HttpConnection conn = (HttpConnection)Connector.open(rssUrl);
 
InputStream rssStream = conn.openInputStream();
 
InputStreamReader isr = new InputStreamReader(rssStream);
 
parser.setInput(isr);
 
parser.nextTag();
 
parser.require(XmlPullParser.START_TAG, null, "rss");
 
parser.nextTag();
 
parser.require(XmlPullParser.START_TAG, null, "channel");
 
parser.nextTag();
 
while(parser.getEventType() != XmlPullParser.END_TAG)
{
String nodeName = parser.getName();
 
if(nodeName.compareTo("item") == 0)
{
items.addElement(parseRssItem(parser));
}
else
{
parser.skipSubTree();
}
parser.nextTag();
}
isr.close();
 
rssStream.close();
 
conn.close();
 
return items;
}

Temos primeiro instanciado nosso vetor de itens e o KXmlParser. Então nós temos que configurar a entrada do leitor com um InputStream, através de um InputStreamReader. Então, nós chamamos duas vezes o método nextTag(), e verificamos pelas tags "rss" e "channel" para serem mostradas:

parser.nextTag();
 
parser.require(XmlPullParser.START_TAG, null, "rss");
 
parser.nextTag();
 
parser.require(XmlPullParser.START_TAG, null, "channel");

Então, depois chamamos mais uma vez nextTag(), nós entramos em um loop while para verificar todas as tags de item disponíveis, retornando todas as outras informações através do método skipSubTree().

while(parser.getEventType() != XmlPullParser.END_TAG)
{
String nodeName = parser.getName();
 
if(nodeName.compareTo("item") == 0)
{
items.addElement(parseRssItem(parser));
}
else
{
parser.skipSubTree();
}
parser.nextTag();
}

Quando nós encontramos um tag item, nós analisamos ele com o seguinte método parseRssItem(). Este método, como visto anteriormente, leremos apenas o título, links e descrição de informações, descartando todos os outros dados.


RssItem parseRssItem(KXmlParser parser) throws Exception
{
RssItem item = new RssItem();
 
parser.nextTag();
 
while(parser.getEventType() != XmlPullParser.END_TAG)
{
String nodeName = parser.getName();
 
if(nodeName.compareTo("title") == 0)
{
item.title = parser.nextText();
}
else if(nodeName.compareTo("description") == 0)
{
item.description = parser.nextText();
}
else if(nodeName.compareTo("link") == 0)
{
item.link = parser.nextText();
}
else
{
parser.skipSubTree();
}
parser.nextTag();
}
return item;
}

Finalmente, nós temos que fechar todos os nossos recursos abertos: As instâncias InputStreamReader, InputStream e Connection.

Simples uso da classe KXmlRssParser

Nós podemos construir uma lista de títulos de itens RSS com o seguinte código:

public TitleList()
{
super("Rss Feed", List.IMPLICIT);
 
KXmlRssParser parser = new KXmlRssParser();
 
try
{
Vector rssItems = parser.parse("http://www.jappit.com/blog/feed/");
 
for(int i = 0; i < rssItems.size(); i++)
{
append(((RssItem)rssItems.elementAt(i)).title, null);
}
}
catch(Exception e)
{
append("Error: " + e, null);
 
e.printStackTrace();
}
}
This page was last modified on 14 February 2014, at 23:27.
50 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×