×
Namespaces

Variants
Actions
(Difference between revisions)

Leitor de RSS, usando KXml, em Java ME

From Nokia Developer Wiki
Jump to: navigation, search
hamishwillee (Talk | contribs)
m (Hamishwillee - Fix categories)
lpvalente (Talk | contribs)
m (Lpvalente -)
Line 20: Line 20:
 
}}
 
}}
  
Nós costruiremos um simples leitor de [http://www.rssboard.org/rss-specification RSS] usando a biblioteca [http://kxml.sourceforge.net/ KXML]. Você pode fazer o download do código fonte completo( incluindo um simples MIDlet de teste)[[media:kxmlrssparser.zip| aqui]]. Para ver o MIDlet funcionando você clicar [http://www.jappit.com/blog/j2me-online-emulator?midlet=kxml_rss_parser aqui].
+
{{Abstract{Neste artigo, nós costruiremos um simples leitor de [http://www.rssboard.org/rss-specification RSS] usando a biblioteca [http://kxml.sourceforge.net/ KXML]. Você pode fazer o download do código fonte completo( incluindo um simples MIDlet de teste)[[media:kxmlrssparser.zip| aqui]]. Para ver o MIDlet funcionando você clicar [http://www.jappit.com/blog/j2me-online-emulator?midlet=kxml_rss_parser aqui].}}
  
 
[[File:J2me kxml rss parser.png]]
 
[[File:J2me kxml rss parser.png]]

Revision as of 19:34, 13 October 2013

Article Metadata

Exemplo de código
Artigo
Tradução:
Por valderind4
Última alteração feita por lpvalente em 13 Oct 2013

{{Abstract{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();
}
}
126 page views in the last 30 days.