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.sax
paquete - 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.SAXParser
para 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:
- Instale el IDE de Eclipse.
- 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.
- Instale la plataforma Android 2.3 SDK. Android SDK proporciona herramientas para desarrollar aplicaciones de Android.
- 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.
- En su IDE de Eclipse, seleccione Archivo -> Nuevo .
- En Nuevo, seleccione Android -> Proyecto de Android , luego haga clic en Siguiente.
- En la ventana Nuevo proyecto de Android, especifique un nombre de proyecto (RSSFeed).
- Seleccione Android Platform 2.3 API 10 para su destino de compilación.
- En Propiedades, especifique un nombre de aplicación (nuevamente, RSSFeed) y un nombre de paquete (android.rss).
- Seleccione la casilla de verificación: Crear actividad y especifique la
Activity
clase (RssFeed
). - 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 Activity
clase crea una ventana para una interfaz de usuario.
El proyecto de Android resultante constará de los siguientes archivos:
- Una clase de actividad (
RSSFeed
), que se extiendeActivity
. - Un archivo res / layout / main.xml , que especifica el diseño de los componentes de la IU de Android.
- 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 LinearLayout
y establezca android:orientation
como " vertical
." Nuestro objetivo es mostrar la fuente RSS como un mensaje de texto, así que agregue un TextView
elemento para el título de la fuente RSS y especifíquelo android:text
como una fuente RSS de Google. Agregue un TextView
elemento, 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 Activity
para iniciar como RSSFeed
. Para acceder a la fuente RSS desde la Web en un dispositivo Android, necesitamos habilitar el android.permission.INTERNET
permiso en AndroidManifest.xml , que permite que las aplicaciones abran sockets de red. Agregue el siguiente uses-permission
elemento:
Especifique la versión mínima de Android con el uses-sdk
elemento. La RSSFeed
actividad, el intent-filter
, y action
se 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.SAXParser
para 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 RSSFeed
clase se extiende Activity
. En la RSSFeed
clase, 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 onCreate
método, configure la interfaz de usuario utilizando el setContentView
método y el recurso de diseño:
setContentView(R.layout.main);
A continuación, usamos el findViewById
método para definir el TextView
objeto del widget de Android en main.xml:
TextView rss = (TextView) findViewById(R.id.rss);
Ahora use el constructor para URL
especificar 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 date
sub-elementos.
Crea el SAXParser
Crea un SAXParserFactory
objeto usando el método estático newInstance
:
SAXParserFactory factory = SAXParserFactory.newInstance();
Crea un SAXParser
usando el newSAXParser
método:
SAXParser saxParser = factory.newSAXParser();
Obtener una XMLReader
de la SAXParser
usando el getXMLReader
mé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.