Astuce Java: configurez un flux RSS pour votre application Android

Utilisez SAXParser de Java pour récupérer et analyser un flux RSS pour Android. Cette astuce Java est destinée aux développeurs qui découvrent Android et comprend des instructions pour configurer un environnement de développement Android et un court didacticiel d'application.

Un flux RSS est un fichier au format XML utilisé pour publier des informations syndiquées régulièrement mises à jour. Un flux RSS peut être analysé (c'est-à-dire lu et formaté) à l'aide d'un analyseur XML. Les analyseurs compatibles Java utilisés pour analyser XML sur Android comprennent:

  • android.content.res.XmlResourceParser est un analyseur pull
  • L'API simple pour XML (SAX) se trouve dans le org.xml.saxpackage
  • Android ROME Feed Reader est le lecteur de flux RSS de Google pour Android
  • Android Feed Reader est un autre lecteur de flux Google RSS / Atom pour Android
  • Android-rss est une bibliothèque Android légère pour les flux RSS 2.0

Cette astuce Java est une introduction étape par étape à l'utilisation de javax.xml.parsers.SAXParserpour analyser un flux RSS au format XML. SAXParser est un choix standard car il est inclus avec les API Android dans le SDK Android. Nous allons configurer l'environnement de développement, créer une application Android simple et un flux à des fins de démonstration, puis utiliser SAXParser pour formater le flux pour Android. Bien qu'une certaine familiarité avec le développement d'applications Java soit supposée, cette astuce convient aux développeurs novices dans le développement mobile Java.

Mise en place de l'environnement

Suivez les étapes suivantes pour configurer l'environnement de développement de ce projet:

  1. Installez l'IDE Eclipse.
  2. Installez le plugin Android Development Tools (ADT) pour Eclipse. Le plugin ADT pour Eclipse fournit un ensemble d'extensions pour développer des applications Android dans Eclipse.
  3. Installez la plate-forme SDK Android 2.3. Android SDK fournit des outils pour développer des applications Android.
  4. Créez un appareil virtuel Android et définissez l'environnement cible sur Android 2.3.3. Niveau API 10.

Le projet Android

Nous allons créer un exemple de projet Android pour recevoir le flux RSS.

  1. Dans votre IDE Eclipse, sélectionnez Fichier -> Nouveau .
  2. Dans Nouveau, sélectionnez Android -> Projet Android , puis cliquez sur Suivant.
  3. Dans la fenêtre Nouveau projet Android, spécifiez un nom de projet (RSSFeed).
  4. Sélectionnez Android Platform 2.3 API 10 pour votre cible de build.
  5. Dans Propriétés, spécifiez un nom d'application (encore une fois, RSSFeed) et un nom de package (android.rss).
  6. Cochez la case: Créer une activité et spécifiez la Activityclasse ( RssFeed).
  7. Spécifiez la version minimale du SDK comme 10 et cliquez sur Suivant; ou, si vous avez sélectionné l'API Platform 3.0 11, spécifiez la version minimale du SDK sur 11.

Notez qu'une activité (étape 6) représente une interaction utilisateur. La classe qui étend la Activityclasse crée une fenêtre pour une interface utilisateur.

Le projet Android résultant sera composé des fichiers suivants:

  1. Une classe d'activité ( RSSFeed), qui s'étend Activity.
  2. Un fichier res / layout / main.xml , qui spécifie la disposition des composants de l'interface utilisateur Android.
  3. Un fichier AndroidManifest.xml , qui contient la configuration de l'application telle que le nom du package, l'activité principale à lancer au démarrage de l'application Android, les composants de l'application, les processus, les autorisations et le niveau minimum d'API.

Dans res / layout / main.xml , spécifiez la disposition des composants de l'interface utilisateur Android. Créez un LinearLayoutet définissez-le android:orientationcomme " vertical." Notre objectif est d'afficher le flux RSS sous forme de message texte, alors ajoutez un TextViewélément pour le titre du flux RSS et spécifiez android:textcomme flux RSS Google. Ajoutez un TextViewélément, avec l'identifiant " rss" pour afficher le flux RSS. Le listing 1 montre le fichier main.xml résultant.

Liste 1. Spécification de la disposition des composants de l'interface utilisateur Android

Dans AndroidManifest.xml , spécifiez le Activityà lancer en tant que RSSFeed. Pour accéder au flux RSS depuis le Web sur un appareil Android, nous devons activer l' android.permission.INTERNETautorisation dans AndroidManifest.xml , qui permet aux applications d'ouvrir des sockets réseau. Ajoutez l' uses-permissionélément suivant :

Spécifiez la version Android minimale avec l' uses-sdkélément. L' RSSFeedactivité, le intent-filteret actionsont spécifiés avec l'élément d'activité et les sous-éléments, comme indiqué dans le Listing 2.

Liste 2. AndroidManifest.xml

Analyser le flux RSS pour Android

Ensuite, nous utiliserons le javax.xml.parsers.SAXParserpour analyser notre flux RSS. Commencez par importer les classes suivantes:

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

Rappelez-vous que la RSSFeedclasse s'étend Activity. Dans la RSSFeedclasse, définissez une variable pour générer le flux RSS:

String rssResult = "";

La onCreate(Bundle savedInstanceState)méthode est appelée au démarrage de l'activité. Dans la onCreateméthode, définissez l'interface utilisateur à l'aide de la setContentViewméthode et de la ressource de mise en page:

setContentView(R.layout.main);

Ensuite, nous utilisons la findViewByIdméthode pour définir l' TextViewobjet widget Android dans main.xml:

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

Utilisez maintenant le constructeur pour URLpour spécifier l'URL du flux RSS:

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

Notez que le flux RSS se compose d' éléments pour les éléments de fil. Chacun se compose de title, description, link, creatoret de datesous-éléments.

Créer le SAXParser

Créez un SAXParserFactoryobjet en utilisant la méthode statique newInstance:

SAXParserFactory factory = SAXParserFactory.newInstance();

Créez un en SAXParserutilisant la newSAXParserméthode:

SAXParser saxParser = factory.newSAXParser();

Obtenez un XMLReaderà l' SAXParseraide de la getXMLReaderméthode:

XMLReader xmlReader = saxParser.getXMLReader();

Gestion des événements SAX2

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.

Cette histoire, "Astuce Java: configurer un flux RSS pour votre application Android" a été publiée à l'origine par JavaWorld.