Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Revision as of 20:27, 14 February 2014 by lpvalente (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Leitor de RSS, usando KXml, em Java ME

From 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 20:27.
276 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.

×