Java-Tipp: Richten Sie einen RSS-Feed für Ihre Android-Anwendung ein

Verwenden Sie Javas SAXParser, um einen RSS-Feed für Android abzurufen und zu analysieren. Dieser Java-Tipp richtet sich an Entwickler, die neu in Android sind, und enthält Anweisungen zum Einrichten einer Android-Entwicklungsumgebung sowie ein kurzes Anwendungs-Tutorial.

Ein RSS-Feed ist eine XML-formatierte Datei, mit der regelmäßig aktualisierte syndizierte Informationen veröffentlicht werden. Ein RSS-Feed kann mithilfe eines XML-Parsers analysiert (dh gelesen und formatiert) werden. Java-kompatible Parser, die zum Parsen von XML unter Android verwendet werden, umfassen:

  • android.content.res.XmlResourceParser ist ein Pull-Parser
  • Eine einfache API für XML (SAX) befindet sich im org.xml.saxPaket
  • Android ROME Feed Reader ist Googles RSS-Feedreader für Android
  • Android Feed Reader ist ein weiterer Google RSS / Atom Feed Reader für Android
  • Android-rss ist eine leichte Android-Bibliothek für RSS 2.0-Feeds

Dieser Java-Tipp ist eine schrittweise Einführung in das javax.xml.parsers.SAXParserParsen eines RSS-Feeds im XML-Format. SAXParser ist eine Standardoption, da es in den Android-APIs des Android SDK enthalten ist. Wir richten die Entwicklungsumgebung ein, erstellen eine einfache Android-App und einen Feed zu Demonstrationszwecken und formatieren den Feed für Android mit SAXParser. Obwohl eine gewisse Vertrautheit mit der Entwicklung von Java-Anwendungen vorausgesetzt wird, eignet sich dieser Tipp für Entwickler, die neu in der Entwicklung von Java-Mobilgeräten sind.

Umgebung einrichten

Führen Sie die folgenden Schritte aus, um die Entwicklungsumgebung für dieses Projekt einzurichten:

  1. Installieren Sie die Eclipse-IDE.
  2. Installieren Sie das ADT-Plugin (Android Development Tools) für Eclipse. Das ADT-Plugin für Eclipse bietet eine Reihe von Erweiterungen für die Entwicklung von Android-Anwendungen in Eclipse.
  3. Installieren Sie die Android 2.3 SDK-Plattform. Das Android SDK bietet Tools zum Entwickeln von Android-Anwendungen.
  4. Erstellen Sie ein virtuelles Android-Gerät und legen Sie die Zielumgebung als Android 2.3.3 fest. API Level 10.

Das Android-Projekt

Wir erstellen ein Beispiel für ein Android-Projekt, um den RSS-Feed zu erhalten.

  1. Wählen Sie in Ihrer Eclipse-IDE Datei -> Neu .
  2. Wählen Sie unter Neu die Option Android -> Android-Projekt aus und klicken Sie auf Weiter.
  3. Geben Sie im Fenster Neues Android-Projekt einen Projektnamen (RSSFeed) an.
  4. Wählen Sie Android Platform 2.3 API 10 als Build-Ziel aus.
  5. Geben Sie unter Eigenschaften einen Anwendungsnamen (erneut RSSFeed) und einen Paketnamen (android.rss) an.
  6. Aktivieren Sie das Kontrollkästchen: Aktivität erstellen und geben Sie die ActivityKlasse ( RssFeed) an.
  7. Geben Sie die minimale SDK-Version als 10 an und klicken Sie auf Weiter. Wenn Sie die Platform 3.0-API 11 ausgewählt haben, geben Sie die minimale SDK-Version als 11 an.

Beachten Sie, dass eine Aktivität (Schritt 6) eine Benutzerinteraktion darstellt. Die Klasse, die die ActivityKlasse erweitert, erstellt ein Fenster für eine Benutzeroberfläche.

Das resultierende Android-Projekt besteht aus folgenden Dateien:

  1. Eine Aktivitätsklasse ( RSSFeed), die erweitert wird Activity.
  2. Eine res / layout / main.xml- Datei, die das Layout der Android-UI-Komponenten angibt.
  3. Eine AndroidManifest.xml- Datei, die die Anwendungskonfiguration enthält, z. B. den Paketnamen, die Hauptaktivität, die beim Starten der Android-Anwendung gestartet werden soll, Anwendungskomponenten, Prozesse, Berechtigungen und die Mindest-API-Ebene.

Geben Sie in res / layout / main.xml das Layout der Android-UI-Komponenten an. Erstellen Sie ein LinearLayoutund setzen Sie android:orientationals " vertical." Unser Ziel ist es, den RSS-Feed als Textnachricht anzuzeigen. Fügen Sie daher ein TextViewElement für den Titel des RSS-Feeds hinzu und geben Sie ihn android:textals Google RSS-Feed an. Fügen Sie ein TextViewElement mit der ID " rss" hinzu, um den RSS-Feed anzuzeigen. Listing 1 zeigt die resultierende Datei main.xml.

Listing 1. Festlegen des Layouts der Android-UI-Komponenten

In AndroidManifest.xml , geben Sie die Activityzu Start als RSSFeed. Um auf einem Android-Gerät über das Web auf den RSS-Feed zugreifen zu können, müssen Sie die android.permission.INTERNETBerechtigung in AndroidManifest.xml aktivieren , mit der Anwendungen Netzwerk-Sockets öffnen können. Fügen Sie das folgende uses-permissionElement hinzu:

Geben Sie die minimale Android-Version mit dem uses-sdkElement an. Die RSSFeedAktivität, das intent-filter, und actionwerden mit dem Aktivitätselement und den Unterelementen angegeben, wie in Listing 2 gezeigt.

Listing 2. AndroidManifest.xml

Analysieren Sie den RSS-Feed für Android

Als nächstes javax.xml.parsers.SAXParseranalysieren wir unseren RSS-Feed mit. Importieren Sie zunächst die folgenden Klassen:

  • javax.xml.parsers.SAXParser
  • javax.xml.parsers.SAXParserFactory
  • org.xml.sax.InputSource
  • org.xml.sax.XMLReader
  • org.xml.sax.helpers.DefaultHandler

Denken Sie daran, dass die RSSFeedKlasse erweitert wird Activity. RSSFeedDefinieren Sie in der Klasse eine Variable zur Ausgabe des RSS-Feeds:

String rssResult = "";

Die onCreate(Bundle savedInstanceState)Methode wird beim Starten der Aktivität aufgerufen. Legen Sie in der onCreateMethode die Benutzeroberfläche mithilfe der setContentViewMethode und der Layoutressource fest:

setContentView(R.layout.main);

Als Nächstes verwenden wir die findViewByIdMethode, um das Android-Widget- TextViewObjekt in main.xml zu definieren :

TextView rss = (TextView) findViewById(R.id.rss);

Verwenden Sie nun den Konstruktor für URL, um die RSS-Feed-URL anzugeben:

URL rssUrl = new URL("//www.javaworld.com/index.xml");

Beachten Sie, dass der RSS-Feed aus Elementen für die Feed-Elemente besteht. Jedes besteht aus title, description, link, creatorund dateUnterelementen.

Erstellen Sie den SAXParser

Erstellen Sie ein SAXParserFactoryObjekt mit der statischen Methode newInstance:

SAXParserFactory factory = SAXParserFactory.newInstance();

Erstellen Sie eine SAXParsermit der newSAXParserMethode:

SAXParser saxParser = factory.newSAXParser();

Erhalten Sie eine XMLReadervon SAXParserder getXMLReaderMethode:

XMLReader xmlReader = saxParser.getXMLReader();

Behandlung von SAX2-Ereignissen

Next, we need to create a DefaultHandler to handle SAX2 events. SAX2 events are XML-parsing events such as the start and end of a document/element, and character data. For the DefaultHandler, first create a private class RSSHandler that extends the DefaultHandler class. Define the implementation for the event handler methods startElement and characters. Each feed item is contained in an element. In the startElement method, if the localName is "item" add the localName to the rssResult String:

rssResult = rssResult + localName + ": ";

In the characters method, add the character data to the rssResult String. Use the replaceAll method to remove all extra spaces in the RSS feed:

String cdata = new String(ch, start, length); if (item == true) rssResult = rssResult +(cdata.trim()).replaceAll("\\s+", " ")+"\t";

In the onCreate method, create an RSSHandler object:

RSSHandler rssHandler = new RSSHandler();

Set the RSSHandler as a content handler on the XMLReader object using the setContentHandler method:

xmlReader.setContentHandler(rssHandler);

Create an InputSource object from the URL for the RSS feed. Open the URL stream using the openStream method:

InputSource inputSource = new InputSource(rssUrl.openStream());

Parse the InputSource using the parse method of the XMLReader object:

xmlReader.parse(inputSource);

Set the rssResult String generated from the RSS feed on the TextView element:

rss.setText(rssResult);

And with that, we're done. The complete Activity class RSSFeed is shown in Listing 3.

Listing 3. RSSFeed

package android.rss; import android.app.Activity; import android.os.Bundle; import java.util.Stack; import android.widget.TextView; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.util.StringTokenizer; import java.net.MalformedURLException; import java.net.URL; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import java.io.IOException; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class RSSFeed extends Activity { /** Called when the activity is first created. */ String rssResult = ""; boolean item = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView rss = (TextView) findViewById(R.id.rss); try { URL rssUrl = new URL("//www.javaworld.com/index.xml"); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); RSSHandler rssHandler = new RSSHandler(); xmlReader.setContentHandler(rssHandler); InputSource inputSource = new InputSource(rssUrl.openStream()); xmlReader.parse(inputSource); } catch (IOException e) {rss.setText(e.getMessage()); } catch (SAXException e) {rss.setText(e.getMessage()); } catch (ParserConfigurationException e) {rss.setText(e.getMessage()); } rss.setText(rssResult); } /**public String removeSpaces(String s) { StringTokenizer st = new StringTokenizer(s," ",false); String; while (st.hasMoreElements()) t += st.nextElement(); return t; }*/ private class RSSHandler extends DefaultHandler { public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { if (localName.equals("item")) item = true; if (!localName.equals("item") && item == true) rssResult = rssResult + localName + ": "; } public void endElement(String namespaceURI, String localName, String qName) throws SAXException { } public void characters(char[] ch, int start, int length) throws SAXException { String cdata = new String(ch, start, length); if (item == true) rssResult = rssResult +(cdata.trim()).replaceAll("\\s+", " ")+"\t"; } } }

Running the Android application

Now let's see what happens when we run the Android application. First, right-click on the RSSFeed application in your Eclipse IDE and select Run As-->Android Application.

Your results will vary slightly based on configuration: If you've configured Android Platform 11 and API 3.0, then Platform 11 AVD will start up. If you've selected Android platform 10 and API 2.3, then platform 10 AVD will start. Either way, the RSSFeed application should be shown as deployed on the correct Android device.

Now click on the RSSFeed application to display the RSS feed, which should appear as shown in Figure 1.

In conclusion

In this Java tip you learned how to set up an RSS feed on Android using SAXParser, which comes bundled with the Android SDK. You can modify this application for any RSS feed by changing the RSS URL. We also did a simple exercise in formatting the RSS feed by removing extra spaces between listed articles.

Deepak Vohra is a Sun Certified Java Programmer, Sun Certified Web Component Developer, and has previously published articles on XML Journal, Java Developer's Journal, WebLogic Journal, and Java.net.

Learn more about this topic

Learn more about Android.

  • Download the Android SDK.
  • Download the Android Development Tools (ADT).
  • Download the JDK
  •  Download the latest version of Eclipse for Java EE.

More from JavaWorld

  • Check out JavaWorld's Mobile Java research zone for more articles like this one.
  • See the JavaWorld Site Map for a complete listing of research centers focused on client-side, enterprise, and core Java development tools and topics.
  • JavaWorld's Java Technology Insider is a podcast series that lets you learn from Java technology experts on your way to work.

Diese Geschichte "Java-Tipp: Einrichten eines RSS-Feeds für Ihre Android-Anwendung" wurde ursprünglich von JavaWorld veröffentlicht.