Programmering

Java-tips: Sett opp en RSS-feed for Android-applikasjonen din

Bruk Java's SAXParser for å hente og analysere en RSS-feed for Android. Dette Java-tipset er for utviklere som er nye for Android og inneholder instruksjoner for å sette opp et Android-utviklingsmiljø og en kort programveiledning.

En RSS-feed er en XML-formatert fil som brukes til å publisere periodisk oppdatert syndikert informasjon. En RSS-feed kan analyseres (det vil si lese og formatere) ved hjelp av en XML-parser. Java-kompatible parsere som brukes til å analysere XML på Android inkluderer:

  • android.content.res.XmlResourceParser er en pull-parser
  • Enkel API for XML (SAX) finnes i org.xml.sax pakke
  • Android ROME Feed Reader er Googles RSS-feedleser for Android
  • Android Feed Reader er en annen Google RSS / Atom-feedleser for Android
  • Android-rss er et lett Android-bibliotek for RSS 2.0-feeder

Dette Java-tipset er en trinnvis introduksjon til bruk av javax.xml.parsers.SAXParser for å analysere en RSS-feed i XML-format. SAXParser er et standard valg fordi det er inkludert i Android API-er i Android SDK. Vi setter opp utviklingsmiljøet, lager en enkel Android-app og feed for demonstrasjonsformål, og bruker deretter SAXParser til å formatere feeden til Android. Mens det antas en viss kjennskap til Java-applikasjonsutvikling, er dette tipset egnet for utviklere som er nye for Java-mobilutvikling.

Sette opp miljøet

Ta følgende trinn for å sette opp utviklingsmiljøet for dette prosjektet:

  1. Installer Eclipse IDE.
  2. Installer Android Development Tools (ADT) plugin for Eclipse. ADT-pluginet for Eclipse gir et sett med utvidelser for å utvikle Android-applikasjoner i Eclipse.
  3. Installer Android 2.3 SDK-plattform. Android SDK gir verktøy for å utvikle Android-applikasjoner.
  4. Lag en Android Virtual Device og sett målmiljøet som Android 2.3.3. API nivå 10.

Android-prosjektet

Vi oppretter et eksempel på et Android-prosjekt for å motta RSS-feed.

  1. I Eclipse IDE velger du Fil -> Ny.
  2. Velg Ny Android -> Android Project, og klikk deretter Neste.
  3. I vinduet New Android Project spesifiserer du et prosjektnavn (RSSFeed).
  4. Velg Android Platform 2.3 API 10 for Build Target.
  5. I Egenskaper angir du et applikasjonsnavn (igjen, RSSFeed) og et pakkenavn (android.rss).
  6. Merk av i avmerkingsboksen: Opprett aktivitet, og spesifiser Aktivitet klasse (RssFeed).
  7. Spesifiser minimum SDK-versjon som 10 og klikk Neste; eller, hvis du har valgt Platform 3.0 API 11, angir du minimum SDK-versjon som 11.

Merk at en aktivitet (Trinn 6) representerer en brukerinteraksjon. Klassen som utvider Aktivitet klasse oppretter et vindu for et brukergrensesnitt.

Det resulterende Android-prosjektet vil bestå av følgende filer:

  1. En aktivitetsklasse (RSSFeed), som strekker seg Aktivitet.
  2. EN res / layout / main.xml fil, som spesifiserer utformingen av Android UI-komponentene.
  3. An AndroidManifest.xml fil, som inneholder applikasjonskonfigurasjon som pakkenavnet, hovedaktiviteten som skal startes når Android-applikasjonen startes, applikasjonskomponenter, prosesser, tillatelser og minimum API-nivå.

I res / layout / main.xml, spesifiser utformingen av Android UI-komponentene. Lage en Lineær oppsett og sett android: orientering som "vertikal. "Målet vårt er å vise RSS-feeden som en tekstmelding, så legg til en TextView element for tittelen på RSS-feeden og spesifiser android: tekst som en Google RSS-feed. Legg til en TextView element, med id "rss"for å vise RSS-feed. Oppføring 1 viser den resulterende main.xml.

Oppføring 1. Spesifisere utformingen av Android UI-komponenter

I AndroidManifest.xml, spesifiser Aktivitet å starte som RSSFeed. For å få tilgang til RSS-strømmen fra Internett på en Android-enhet, må vi aktivere android.permission.INTERNET tillatelse i AndroidManifest.xml, som lar applikasjoner åpne nettverkskontakter. Legg til følgende bruker-tillatelse element:

Spesifiser minimum Android-versjon med bruker-sdk element. De RSSFeed aktivitet, den hensiktsfilter, og handling er spesifisert med aktivitetselementet og underelementene, som vist i Oppføring 2.

Oppføring 2. AndroidManifest.xml

Analyser RSS-feeden for Android

Neste bruker vi javax.xml.parsers.SAXParser for å analysere RSS-feeden vår. Start med å importere følgende klasser:

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

Husk at RSSFeed klasse utvider Aktivitet. I RSSFeed klasse, definer en variabel som skal sendes ut RSS-feed:

Streng rssResult = "";

De onCreate (Bundle savedInstanceState) metode påkalles når aktiviteten startes. I onCreate metoden, still brukergrensesnittet ved hjelp av setContentView metode og layoutressurs:

setContentView (R.layout.main);

Deretter bruker vi findViewById metode for å definere Android-widgeten TextView objekt i main.xml:

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

Bruk nå konstruktøren til URL for å spesifisere RSS-feed-URL:

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

Merk at RSS-feeden består av elementer for fôrelementene. Hver inneholder tittel, beskrivelse, lenke, skaper, og Dato delelementer.

Opprett SAXParser

Lage en SAXParserFactory objekt ved hjelp av den statiske metoden newInstance:

SAXParserFactory fabrikk = SAXParserFactory.newInstance ();

Lage en SAXParser bruker newSAXParser metode:

SAXParser saxParser = fabrikk.newSAXParser ();

Få en XMLReader fra SAXParser bruker getXMLReader metode:

XMLReader xmlReader = saxParser.getXMLReader ();

Håndtering av SAX2-hendelser

Deretter må vi lage en DefaultHandler for å håndtere SAX2-hendelser. SAX2-hendelser er XML-parsing-hendelser som begynnelsen og slutten av et dokument / element og karakterdata. For DefaultHandler, oppretter først en privat klasse RSSHandler som utvider DefaultHandler klasse. Definer implementeringen for hendelsesbehandlingsmetodene startElement og tegn. Hvert feedelement er inneholdt i en element. I startElement metode, hvis localName er "element" legg til localName til rssResult String:

rssResult = rssResult + localName + ":";

I tegn metode, legg til tegndataene i rssResult String. Bruke erstatte alle metode for å fjerne alle ekstra mellomrom i RSS-feeden:

String cdata = ny streng (ch, start, lengde); hvis (item == true) rssResult = rssResult + (cdata.trim ()). erstatteAll ("\ s +", "") + "\ t";

I onCreate metode, lage en RSSHandler gjenstand:

RSSHandler rssHandler = ny RSSHandler ();

Sett RSSHandler som en innholdshåndterer på XMLReader objektet ved hjelp av setContentHandler metode:

xmlReader.setContentHandler (rssHandler);

Lag en InputSource objekt fra URL-en for RSS-feeden. Åpne URL-strømmen ved hjelp av openStream metode:

InputSource inputSource = ny InputSource (rssUrl.openStream ());

Analyser InputSource bruker analysere metoden for XMLReader gjenstand:

xmlReader.parse (inputSource);

Sett rssResult String generert fra RSS-feeden på TextView element:

rss.setText (rssResult);

Og med det er vi ferdige. Det komplette Aktivitet klasse RSSFeed er vist i Listing 3.

Oppføring 3. RSSFeed

pakke android.rss; importere android.app.Activity; importere android.os.Bundle; importere java.util.Stack; importere android.widget.TextView; importere javax.xml.parsers.SAXParser; importere javax.xml.parsers.SAXParserFactory; importere java.util.StringTokenizer; import java.net.MalformedURLException; importere java.net.URL; importer org.xml.sax.InputSource; importer org.xml.sax.XMLReader; importere java.io.IOException; importer org.xml.sax.SAXException; importere javax.xml.parsers.ParserConfigurationException; importer org.xml.sax.Attributter; importer org.xml.sax.SAXException; importer org.xml.sax.helpers.DefaultHandler; public class RSSFeed utvider aktivitet {/ ** Ringes når aktiviteten først opprettes. * / String rssResult = ""; boolsk gjenstand = falsk; @ Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.main); TextView rss = (TextView) findViewById (R.id.rss); prøv {URL rssUrl = ny URL ("// www.javaworld.com/index.xml"); SAXParserFactory fabrikk = SAXParserFactory.newInstance (); SAXParser saxParser = fabrikk.newSAXParser (); XMLReader xmlReader = saxParser.getXMLReader (); RSSHandler rssHandler = ny RSSHandler (); xmlReader.setContentHandler (rssHandler); InputSource inputSource = ny InputSource (rssUrl.openStream ()); xmlReader.parse (inputSource); } fange (IOException e) {rss.setText (e.getMessage ()); } fange (SAXException e) {rss.setText (e.getMessage ()); } fange (ParserConfigurationException e) {rss.setText (e.getMessage ()); } rss.setText (rssResult); } / ** public String removeSpaces (String s) {StringTokenizer st = new StringTokenizer (s, "", false); Streng; mens (st.hasMoreElements ()) t + = st.nextElement (); returnere t; } * / private klasse RSSHandler utvider DefaultHandler {public void startElement (String uri, String localName, String qName, Attributes attrs) kaster SAXException {if (localName.equals ("item")) item = true; hvis (! localName.equals ("item") && item == true) rssResult = rssResult + localName + ":"; } public void endElement (String namespaceURI, String localName, String qName) kaster SAXException {} public void characters (char [] ch, int start, int length) kaster SAXException {String cdata = new String (ch, start, length); hvis (item == true) rssResult = rssResult + (cdata.trim ()). erstatteAll ("\ s +", "") + "\ t"; }}}

Kjører Android-applikasjonen

La oss nå se hva som skjer når vi kjører Android-applikasjonen. Høyreklikk først på RSSFeed-applikasjonen i Eclipse IDE og velg Kjør som -> Android-applikasjon.

Resultatene dine vil variere litt basert på konfigurasjon: Hvis du har konfigurert Android Platform 11 og API 3.0, vil Platform 11 AVD starte opp. Hvis du har valgt Android-plattform 10 og API 2.3, vil plattform 10 AVD starte. Uansett, RSSFeed-applikasjonen skal vises som distribuert på riktig Android-enhet.

Klikk nå på RSSFeed-applikasjonen for å vise RSS-feeden, som skal vises som vist i figur 1.

For å konkludere

I dette Java-tipset lærte du hvordan du setter opp en RSS-feed på Android ved hjelp av SAXParser, som følger med Android SDK. Du kan endre dette programmet for hvilken som helst RSS-feed ved å endre RSS URL. Vi gjorde også en enkel øvelse i å formatere RSS-feeden ved å fjerne ekstra mellomrom mellom oppførte artikler.

Deepak Vohra er en Sun Certified Java-programmerer, Sun Certified Web Component Developer, og har tidligere publisert artikler om XML Journal, Java Developer's Journal, WebLogic Journal og Java.net.

Lær mer om dette emnet

Lær mer om Android.

  • Last ned Android SDK.
  • Last ned Android Development Tools (ADT).
  • Last ned JDK
  • Last ned den siste versjonen av Eclipse for Java EE.

Mer fra JavaWorld

  • Sjekk ut JavaWorlds mobile Java-forskningssone for flere artikler som denne.
  • Se JavaWorld-nettstedskartet for en fullstendig oversikt over forskningssentre med fokus på Java-utviklingsverktøy og emner på klientsiden, virksomheten og kjerneområdet.
  • JavaWorlds Java Technology Insider er en podcast-serie som lar deg lære av Java-teknologieksperter på vei til jobb.

Denne historien, "Java Tips: Sett opp en RSS-feed for Android-applikasjonen din" ble opprinnelig utgitt av JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found