Suggerimento Java: imposta un feed RSS per la tua applicazione Android

Usa SAXParser di Java per recuperare e analizzare un feed RSS per Android. Questo suggerimento Java è per gli sviluppatori che non conoscono Android e include istruzioni per la configurazione di un ambiente di sviluppo Android e un breve tutorial dell'applicazione.

Un feed RSS è un file in formato XML utilizzato per pubblicare informazioni sindacate periodicamente aggiornate. Un feed RSS può essere analizzato (cioè letto e formattato) utilizzando un parser XML. I parser compatibili con Java utilizzati per analizzare XML su Android includono:

  • android.content.res.XmlResourceParser è un pull parser
  • La semplice API per XML (SAX) si trova nel org.xml.saxpacchetto
  • Android ROME Feed Reader è il lettore di feed RSS di Google per Android
  • Android Feed Reader è un altro lettore di feed RSS / Atom di Google per Android
  • Android-rss è una libreria Android leggera per feed RSS 2.0

Questo suggerimento Java è un'introduzione passo passo all'uso di javax.xml.parsers.SAXParserper analizzare un feed RSS in formato XML. SAXParser è una scelta standard perché è incluso con le API Android nell'SDK Android. Configureremo l'ambiente di sviluppo, creeremo una semplice app Android e feed a scopo dimostrativo, quindi utilizzeremo SAXParser per formattare il feed per Android. Sebbene si presuma una certa familiarità con lo sviluppo di applicazioni Java, questo suggerimento è adatto agli sviluppatori che non conoscono lo sviluppo mobile Java.

Predisporre l'ambiente

Eseguire le seguenti operazioni per configurare l'ambiente di sviluppo per questo progetto:

  1. Installa l'IDE di Eclipse.
  2. Installa il plug-in Android Development Tools (ADT) per Eclipse. Il plug-in ADT per Eclipse fornisce una serie di estensioni per sviluppare applicazioni Android in Eclipse.
  3. Installa la piattaforma Android 2.3 SDK. Android SDK fornisce strumenti per lo sviluppo di applicazioni Android.
  4. Crea un dispositivo virtuale Android e imposta l'ambiente di destinazione come Android 2.3.3. Livello API 10.

Il progetto Android

Creeremo un progetto Android di esempio per ricevere il feed RSS.

  1. Nel tuo IDE Eclipse seleziona File -> Nuovo .
  2. In Nuovo seleziona Android -> Progetto Android , quindi fai clic su Avanti.
  3. Nella finestra Nuovo progetto Android, specifica un nome di progetto (RSSFeed).
  4. Seleziona Android Platform 2.3 API 10 per il tuo Build Target.
  5. In Proprietà, specificare un nome dell'applicazione (di nuovo, RSSFeed) e un nome del pacchetto (android.rss).
  6. Seleziona la casella di controllo: Crea attività e specifica la Activityclasse ( RssFeed).
  7. Specificare la versione minima dell'SDK 10 e fare clic su Avanti; oppure, se hai selezionato l'API 11 della piattaforma 3.0, specifica 11 come versione minima dell'SDK.

Tieni presente che un'attività (passaggio 6) rappresenta un'interazione dell'utente. La classe che estende la Activityclasse crea una finestra per un'interfaccia utente.

Il progetto Android risultante sarà costituito dai seguenti file:

  1. Una classe di attività ( RSSFeed), che si estende Activity.
  2. Un file res / layout / main.xml , che specifica il layout dei componenti dell'interfaccia utente Android.
  3. Un file AndroidManifest.xml , che contiene la configurazione dell'applicazione come il nome del pacchetto, l'attività principale da avviare all'avvio dell'applicazione Android, i componenti dell'applicazione, i processi, le autorizzazioni e il livello API minimo.

In res / layout / main.xml , specifica il layout dei componenti dell'interfaccia utente Android. Crea un LinearLayoute imposta android:orientationcome " vertical." Il nostro obiettivo è visualizzare il feed RSS come messaggio di testo, quindi aggiungi un TextViewelemento per il titolo del feed RSS e specifica android:textcome feed RSS di Google. Aggiungi un TextViewelemento, con id " rss" per visualizzare il feed RSS. Il listato 1 mostra il main.xml risultante.

Listato 1. Specifica del layout dei componenti dell'interfaccia utente Android

In AndroidManifest.xml , specifica il Activityda avviare come RSSFeed. Per accedere al feed RSS dal Web su un dispositivo Android è necessario abilitare l' android.permission.INTERNETautorizzazione in AndroidManifest.xml , che consente alle applicazioni di aprire socket di rete. Aggiungi il seguente uses-permissionelemento:

Specifica la versione minima di Android con l' uses-sdkelemento. L' RSSFeedattività, il intent-filtere actionsono specificati con l'elemento attività e sottoelementi, come mostrato nel Listato 2.

Listato 2. AndroidManifest.xml

Analizza il feed RSS per Android

Successivamente useremo il javax.xml.parsers.SAXParserper analizzare il nostro feed RSS. Inizia importando le seguenti classi:

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

Ricorda che la RSSFeedclasse si estende Activity. Nella RSSFeedclasse, definire una variabile per l'output del feed RSS:

String rssResult = "";

Il onCreate(Bundle savedInstanceState)metodo viene richiamato all'avvio dell'attività. Nel onCreatemetodo, impostare l'interfaccia utente utilizzando il setContentViewmetodo e la risorsa di layout:

setContentView(R.layout.main);

Successivamente, utilizziamo il findViewByIdmetodo per definire l' TextViewoggetto widget Android in main.xml:

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

Ora usa il costruttore per URLper specificare l'URL del feed RSS:

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

Tieni presente che il feed RSS è costituito da elementi per gli elementi del feed. Ciascuno è costituito da title, description, link, creatore datesottoelementi.

Crea il SAXParser

Crea un SAXParserFactoryoggetto utilizzando il metodo statico newInstance:

SAXParserFactory factory = SAXParserFactory.newInstance();

Crea un SAXParserutilizzando il newSAXParsermetodo:

SAXParser saxParser = factory.newSAXParser();

Ottieni un XMLReaderdal SAXParserusando il getXMLReadermetodo:

XMLReader xmlReader = saxParser.getXMLReader();

Gestione degli eventi SAX2

Successivamente, dobbiamo creare un DefaultHandlerper gestire gli eventi SAX2. Gli eventi SAX2 sono eventi di analisi XML come l'inizio e la fine di un documento / elemento e dati carattere. Per DefaultHandlerprima cosa crea una classe privata RSSHandlerche estende la DefaultHandlerclasse. Definire l'implementazione per i metodi del gestore eventi startElemente characters. Ogni elemento del feed è contenuto in un elemento. Nel startElementmetodo, se localNameè "elemento" aggiungi localNameil rssResult String:

rssResult = rssResult + localName + ": ";

Nel charactersmetodo, aggiungi i dati del carattere al file rssResult String. Usa il replaceAllmetodo per rimuovere tutti gli spazi extra nel feed RSS:

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

Nel onCreatemetodo, crea un RSSHandleroggetto:

RSSHandler rssHandler = new RSSHandler();

Imposta RSSHandlercome gestore del contenuto XMLReadersull'oggetto utilizzando il setContentHandlermetodo:

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.

Questa storia, "Suggerimento Java: configura un feed RSS per la tua applicazione Android" è stata originariamente pubblicata da JavaWorld.