Parsen Sie einen RSS-Feed für die Android App? Ist jsoup die Antwort?

Ich lese das Head First Android Entwicklungsbuch. Im dritten Kapitel, wo sie versuchen, eine App von der NASA RSS-Feed von hier zu machen.
Im Buch verwendet der Autor SAX-Parser für Java. Ich schaute online und einige der Antworten hier auf SO deuten darauf hin, dass SAX ist veraltet und es gibt neuere Lösungen.

Ich bin mir jedoch nicht sicher, was die einfacheren für Java sind. Ich habe Nokogiri für ruby verwendet und etwas ähnliches wäre großartig. Ich schaute auf jsoup und es sah gut aus, aber ich frage mich, welche Vorschläge ihr vielleicht habt.

0
hinzugefügt bearbeitet
Ansichten: 1
hinzugefügt der Autor Aamirkhan, Quelle
Siehe diesen Link androidhive.info vielleicht hilfreich für Sie.
hinzugefügt der Autor Vivek Kumar Srivastava, Quelle

5 Antworten

Ich bin der Autor von Head First Android Development, also wollte ich nur ein paar Gedanken mitspielen. SAX ist definitiv ein wenig umständlich, aber einfach und wurde für eine Weile in Android eingebaut (daher die Entscheidung, das im Buch zu verwenden). Ich bin auch ein Rails-Entwickler und ich bin ein großer Fan von Nokogiri und benutze es oft. Wenn ich auf jsoup schaue, könnte ich definitiv sehen, dass es nützlich ist. Das heißt, ich habe es nicht ausprobiert, daher kann ich keine Erfahrung aus erster Hand damit geben.

Eine weitere Option ist der xml PullParser , der in Android integriert ist. Es ist immer noch ziemlich SAX-like, aber ein bisschen mehr voll ausgestattet.

Hoffe das hilft.

1
hinzugefügt
Johathan Ich liebe dein Buch, aber ich kämpfe auch mit dem XML-Parser. Der Code auf GitHub für Kapitel 3 funktioniert derzeit nicht und ich frage mich, ob sie in naher Zukunft behoben werden. Ich überlege gerade, meinen eigenen Parser zu erstellen, nachdem ich versäumt habe, den Parser zu modifizieren (er muss kompiliert werden, aber die App force schließt = /). Vielen Dank!
hinzugefügt der Autor Tyler Pfaff, Quelle

Der Code in Kapitel 3 hält an, da Android das Netzwerk im Hauptthread nicht unterstützt.

Sie können also jeden Parser wie XmlPullParser verwenden, aber stellen Sie sicher, dass Sie das Netzwerk (den Feed usw. herunterladend) von seinem Hauptthread durchführen. Sie können AsyncTask verwenden, um das Netzwerk außerhalb des Hauptthreads zu verwenden .. oder erstellen Sie einen neuen Thread() und führen Sie das Netzwerk in diesem Thread aus (empfohlen)

Tatsächlich haben sie im 4. Kapitel tatsächlich einen neuen Thread erstellt, um das Netzwerk zu machen. Wenn Sie stattdessen den Code von Kapitel 4 verwenden, wird es funktionieren.

Ein anderes Problem, dem Sie möglicherweise gegenüberstehen, ist OutOfMemoryError, da die täglichen Bilder der NASAs heutzutage sehr groß sind. Also musst du das Bild mit inSampleSize dekodieren. Sie können andere Fragen zum Entschlüsseln eines Bildes nachsehen, um zu bekommen, was Sie wollen. Viel Glück. ))

1
hinzugefügt

Ich denke, SAX ist eine Standardmethode, um es zu erreichen, keine Einschränkungen, wenn man etwas Neues ausprobieren möchte :)

0
hinzugefügt

Seit Version 1.6.2 unterstützt Jsoup offiziell auch das XML-Parsing. Auf diese Weise können Sie xml analysieren und Elemente mithilfe von jQuery-ähnlichen CSS-Selektoren auswählen. Um ein XML-Dokument mit Jsoup zu erstellen, benötigen Sie Folgendes anstelle der Jsoup # parse() -Methode:

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
hinzugefügt

Ich bin ein großer Fan von Jsoup. Ich benutze es erst seit kurzem und es ist erstaunlich. Ich habe einige super haarige Regex-Muster geschrieben, um Muster zu finden, weil ich SAX wie die Pest vermeiden wollte ... und das war ziemlich langweilig, wie Sie sich vorstellen können. Jsoup ließ mich bestimmte Gegenstände von einem analysieren<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
hinzugefügt