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.sax
Paket - 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.SAXParser
Parsen 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:
- Installieren Sie die Eclipse-IDE.
- 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.
- Installieren Sie die Android 2.3 SDK-Plattform. Das Android SDK bietet Tools zum Entwickeln von Android-Anwendungen.
- 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.
- Wählen Sie in Ihrer Eclipse-IDE Datei -> Neu .
- Wählen Sie unter Neu die Option Android -> Android-Projekt aus und klicken Sie auf Weiter.
- Geben Sie im Fenster Neues Android-Projekt einen Projektnamen (RSSFeed) an.
- Wählen Sie Android Platform 2.3 API 10 als Build-Ziel aus.
- Geben Sie unter Eigenschaften einen Anwendungsnamen (erneut RSSFeed) und einen Paketnamen (android.rss) an.
- Aktivieren Sie das Kontrollkästchen: Aktivität erstellen und geben Sie die
Activity
Klasse (RssFeed
) an. - 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 Activity
Klasse erweitert, erstellt ein Fenster für eine Benutzeroberfläche.
Das resultierende Android-Projekt besteht aus folgenden Dateien:
- Eine Aktivitätsklasse (
RSSFeed
), die erweitert wirdActivity
. - Eine res / layout / main.xml- Datei, die das Layout der Android-UI-Komponenten angibt.
- 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 LinearLayout
und setzen Sie android:orientation
als " vertical
." Unser Ziel ist es, den RSS-Feed als Textnachricht anzuzeigen. Fügen Sie daher ein TextView
Element für den Titel des RSS-Feeds hinzu und geben Sie ihn android:text
als Google RSS-Feed an. Fügen Sie ein TextView
Element 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 Activity
zu 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.INTERNET
Berechtigung in AndroidManifest.xml aktivieren , mit der Anwendungen Netzwerk-Sockets öffnen können. Fügen Sie das folgende uses-permission
Element hinzu:
Geben Sie die minimale Android-Version mit dem uses-sdk
Element an. Die RSSFeed
Aktivität, das intent-filter
, und action
werden 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.SAXParser
analysieren 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 RSSFeed
Klasse erweitert wird Activity
. RSSFeed
Definieren 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 onCreate
Methode die Benutzeroberfläche mithilfe der setContentView
Methode und der Layoutressource fest:
setContentView(R.layout.main);
Als Nächstes verwenden wir die findViewById
Methode, um das Android-Widget- TextView
Objekt 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, creator
und date
Unterelementen.
Erstellen Sie den SAXParser
Erstellen Sie ein SAXParserFactory
Objekt mit der statischen Methode newInstance
:
SAXParserFactory factory = SAXParserFactory.newInstance();
Erstellen Sie eine SAXParser
mit der newSAXParser
Methode:
SAXParser saxParser = factory.newSAXParser();
Erhalten Sie eine XMLReader
von SAXParser
der getXMLReader
Methode:
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.