Analisar um feed RSS para o aplicativo Android? Jsoup é a resposta?

Eu estou lendo o livro de desenvolvimento Head First Android. No terceiro capítulo, onde eles tentam criar um aplicativo do feed RSS da NASA, aqui .
No livro, o autor usa SAX parser para Java. Olhei on-line e algumas das respostas aqui no SO sugerem que o SAX está desatualizado e que existem soluções mais recentes.

No entanto, não tenho certeza do que são mais fáceis de usar para Java. Eu usei Nokogiri para ruby e algo similar seria incrível. Eu olhei para o jsoup e ele ficou bem, mas eu estou me perguntando quais sugestões vocês podem ter.

0
adicionado editado
Visualizações: 1
adicionado o autor Aamirkhan, fonte
veja este link androidhive.info talvez seja útil para você.
adicionado o autor Vivek Kumar Srivastava, fonte

5 Respostas

Eu sou o autor do Head First Android Development, então só queria conversar com alguns pensamentos. SAX é definitivamente um pouco complicado, mas simples e foi construído no Android por um tempo (daí a decisão de usar isso no livro). Eu também sou um desenvolvedor de trilhos e sou um grande fã do nokogiri e uso isso com frequência. Olhando para o jsoup, eu definitivamente pude ver isso sendo útil. Dito isso, eu não tentei, então não posso dar nenhuma experiência em primeira mão com isso.

Outra opção é o xml PullParser incorporado no Android. Ainda é muito parecido com o SAX, mas um pouco mais completo.

Espero que isto ajude.

1
adicionado
Johathan Adoro o seu livro, mas também estou lutando com o analisador xml. O código no github para o capítulo 3 não funciona atualmente e eu queria saber se eles serão corrigidos em breve? Eu estou pensando em tentar fazer meu próprio analisador depois de falhar ao tentar modificar seu analisador (Entendi para compilar, mas a força do aplicativo fecha = /). Obrigado!
adicionado o autor Tyler Pfaff, fonte

O código no capítulo 3 é interrompido porque o Android não suporta rede em seu segmento principal.

Portanto, você pode usar qualquer analisador parecido com o XmlPullParser, mas certifique-se de fazer o trabalho em rede (baixando o feed, etc.) fora de seu thread principal. Você pode usar o AsyncTask para colocar a rede fora do thread principal .. ou criar um novo Thread() e fazer o networking nesse thread (Recomendado)

Na verdade, no capítulo 4 eles realmente criaram um novo thread para fazer o networking. Então, se você usar o código chapter4, ele funcionará.

Outro problema que você pode enfrentar é o OutOfMemoryError, porque as imagens diárias da Nasa são realmente grandes hoje em dia. Então você terá que decodificar a imagem com inSampleSize. Você pode verificar outras questões sobre a decodificação de uma imagem para obter o que deseja. Boa sorte. ))

1
adicionado

Eu acho que o SAX é uma maneira padrão de conseguir isso, mas não há limites para tentar algo novo :)

0
adicionado

Desde versão 1.6.2 , o Jsoup também oferece suporte à análise de XML. Isso permite que você analise xml e selecione elementos usando seletores de CSS semelhantes a jQuery. Para criar um documento xml com o Jsoup, você precisa do seguinte em vez do método Jsoup # parse() :

Document document = Parser.xmlParser().parseInput(xmlString, "");
// ...

This way the input won't implicitly be treated as HTML5 (so, no auto-included <html><head> tags and so on).

0
adicionado

Eu sou um grande fã do Jsoup. Eu só recentemente comecei a usá-lo e é incrível. Eu costumava escrever alguns padrões de regex super peludos para fazer correspondência de padrões porque eu queria evitar o SAX como a praga ... e isso era muito entediante como você pode imaginar. Jsoup me deixou analisar itens específicos de um<table> in just a few lines of code.

Let's say I want to take the first 7 rows of a table where the <tr class=...> is GridItem or GridAltItem. Then, lets say we want to print the 1st, 2nd, and 3rd columns as text and then the first link that appears in the row. Sounds goofy, but I had to do this and I can do this easily:

String page = "... some html markup fetched from somewhere ...";
Document doc = Jsoup.parse(page);
for(int x=0; x< 7; x++) {
  Element gridItem = doc.select("tr[class$=Item]").select("tr").get(x);
  System.out.println("row: " + gridItem.select("td").get(0).text() + " " + gridItem.select("td").get(1).text() + " " + gridItem.select("td").get(4).text() + " " + gridItem.select("a").get(0).attr("href"));
}

Its that simple with Jsoup. Make sure you add the Jsoup jar file to your project as a library and import those classes which you need: you don't want to import the wrong Document or Element class...

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

Enjoy!

0
adicionado