Consejo de Java: configure una fuente RSS para su aplicación de Android

Utilice SAXParser de Java para recuperar y analizar una fuente RSS para Android. Este consejo de Java es para desarrolladores nuevos en Android e incluye instrucciones para configurar un entorno de desarrollo de Android y un breve tutorial de la aplicación.

Una fuente RSS es un archivo con formato XML que se utiliza para publicar información sindicada actualizada periódicamente. Una fuente RSS se puede analizar (es decir, leer y formatear) utilizando un analizador XML. Los analizadores compatibles con Java que se utilizan para analizar XML en Android incluyen:

  • android.content.res.XmlResourceParser es un analizador de extracción
  • API simple para XML (SAX) se encuentra en el org.xml.saxpaquete
  • Android ROME Feed Reader es el lector de feeds RSS de Google para Android
  • Android Feed Reader es otro lector de feeds RSS / Atom de Google para Android
  • Android-rss es una biblioteca ligera de Android para feeds RSS 2.0

Esta sugerencia de Java es una introducción paso a paso al uso de javax.xml.parsers.SAXParserpara analizar una fuente RSS en formato XML. SAXParser es una opción estándar porque se incluye con las API de Android en el SDK de Android. Configuraremos el entorno de desarrollo, crearemos una aplicación de Android simple y alimentaremos con fines de demostración y luego usaremos SAXParser para formatear el feed para Android. Si bien se asume cierta familiaridad con el desarrollo de aplicaciones Java, este consejo es adecuado para desarrolladores nuevos en el desarrollo móvil de Java.

Configurando el medio ambiente

Siga los siguientes pasos para configurar el entorno de desarrollo de este proyecto:

  1. Instale el IDE de Eclipse.
  2. Instale el complemento de herramientas de desarrollo de Android (ADT) para Eclipse. El complemento ADT para Eclipse proporciona un conjunto de extensiones para desarrollar aplicaciones de Android en Eclipse.
  3. Instale la plataforma Android 2.3 SDK. Android SDK proporciona herramientas para desarrollar aplicaciones de Android.
  4. Cree un dispositivo virtual Android y configure el entorno de destino como Android 2.3.3. Nivel API 10.

El proyecto de Android

Crearemos un proyecto de Android de ejemplo para recibir la fuente RSS.

  1. En su IDE de Eclipse, seleccione Archivo -> Nuevo .
  2. En Nuevo, seleccione Android -> Proyecto de Android , luego haga clic en Siguiente.
  3. En la ventana Nuevo proyecto de Android, especifique un nombre de proyecto (RSSFeed).
  4. Seleccione Android Platform 2.3 API 10 para su destino de compilación.
  5. En Propiedades, especifique un nombre de aplicación (nuevamente, RSSFeed) y un nombre de paquete (android.rss).
  6. Seleccione la casilla de verificación: Crear actividad y especifique la Activityclase ( RssFeed).
  7. Especifique la versión mínima del SDK como 10 y haga clic en Siguiente; o, si ha seleccionado Platform 3.0 API 11, especifique la versión mínima del SDK como 11.

Tenga en cuenta que una actividad (paso 6) representa una interacción del usuario. La clase que extiende la Activityclase crea una ventana para una interfaz de usuario.

El proyecto de Android resultante constará de los siguientes archivos:

  1. Una clase de actividad ( RSSFeed), que se extiende Activity.
  2. Un archivo res / layout / main.xml , que especifica el diseño de los componentes de la IU de Android.
  3. Un archivo AndroidManifest.xml , que contiene la configuración de la aplicación, como el nombre del paquete, la actividad principal que se inicia cuando se inicia la aplicación de Android, los componentes de la aplicación, los procesos, los permisos y el nivel mínimo de API.

En res / layout / main.xml , especifique el diseño de los componentes de la interfaz de usuario de Android. Cree un LinearLayouty establezca android:orientationcomo " vertical." Nuestro objetivo es mostrar la fuente RSS como un mensaje de texto, así que agregue un TextViewelemento para el título de la fuente RSS y especifíquelo android:textcomo una fuente RSS de Google. Agregue un TextViewelemento, con id " rss" para mostrar la fuente RSS. El Listado 1 muestra el archivo main.xml resultante.

Listado 1. Especificación del diseño de los componentes de la interfaz de usuario de Android

En AndroidManifest.xml , especifique Activitypara iniciar como RSSFeed. Para acceder a la fuente RSS desde la Web en un dispositivo Android, necesitamos habilitar el android.permission.INTERNETpermiso en AndroidManifest.xml , que permite que las aplicaciones abran sockets de red. Agregue el siguiente uses-permissionelemento:

Especifique la versión mínima de Android con el uses-sdkelemento. La RSSFeedactividad, el intent-filter, y actionse especifican con el elemento y subelementos de actividad, como se muestra en el Listado 2.

Listado 2. AndroidManifest.xml

Analizar la fuente RSS para Android

A continuación, usaremos javax.xml.parsers.SAXParserpara analizar nuestra fuente RSS. Comience importando las siguientes clases:

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

Recuerde que la RSSFeedclase se extiende Activity. En la RSSFeedclase, defina una variable para generar la fuente RSS:

String rssResult = "";

El onCreate(Bundle savedInstanceState)método se invoca cuando se inicia la actividad. En el onCreatemétodo, configure la interfaz de usuario utilizando el setContentViewmétodo y el recurso de diseño:

setContentView(R.layout.main);

A continuación, usamos el findViewByIdmétodo para definir el TextViewobjeto del widget de Android en main.xml:

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

Ahora use el constructor para URLespecificar la URL de la fuente RSS:

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

Tenga en cuenta que el canal RSS consta de elementos para los elementos del canal. Cada consta de title, description, link, creator, y datesub-elementos.

Crea el SAXParser

Crea un SAXParserFactoryobjeto usando el método estático newInstance:

SAXParserFactory factory = SAXParserFactory.newInstance();

Crea un SAXParserusando el newSAXParsermétodo:

SAXParser saxParser = factory.newSAXParser();

Obtener una XMLReaderde la SAXParserusando el getXMLReadermétodo:

XMLReader xmlReader = saxParser.getXMLReader();

Manejo de eventos 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.

Esta historia, "Consejo de Java: configure una fuente RSS para su aplicación de Android" fue publicada originalmente por JavaWorld.