Programmering

Java-tip: Opret et RSS-feed til din Android-applikation

Brug Java's SAXParser til at hente og analysere et RSS-feed til Android. Dette Java-tip er til udviklere, der er nye til Android og inkluderer instruktioner til opsætning af et Android-udviklingsmiljø og en kort applikationsvejledning.

Et RSS-feed er en XML-formateret fil, der bruges til at offentliggøre periodisk opdaterede syndikerede oplysninger. Et RSS-feed kan parses (dvs. læses og formateres) ved hjælp af en XML-parser. Java-kompatible parsere, der bruges til at analysere XML på Android, inkluderer:

  • android.content.res.XmlResourceParser er en pull-parser
  • Simple API til XML (SAX) findes i org.xml.sax pakke
  • Android ROME Feed Reader er Googles RSS-feedlæser til Android
  • Android Feed Reader er en anden Google RSS / Atom feed-læser til Android
  • Android-rss er et let Android-bibliotek til RSS 2.0-feeds

Dette Java-tip er en trinvis introduktion til brug af javax.xml.parsers.SAXParser for at analysere et RSS-feed i XML-format. SAXParser er et standardvalg, fordi det er inkluderet i Android API'erne i Android SDK. Vi opretter udviklingsmiljøet, opretter en simpel Android-app og feed til demonstrationsformål og bruger derefter SAXParser til at formatere feedet til Android. Mens der antages en vis fortrolighed med Java-applikationsudvikling, er dette tip egnet til udviklere, der er nye til Java-mobiludvikling.

Opsætning af miljøet

Tag følgende trin for at opsætte udviklingsmiljøet til dette projekt:

  1. Installer Eclipse IDE.
  2. Installer Android Development Tools (ADT) plugin til Eclipse. ADT-plugin til Eclipse giver et sæt udvidelser til udvikling af Android-applikationer i Eclipse.
  3. Installer Android 2.3 SDK-platform. Android SDK giver værktøjer til udvikling af Android-applikationer.
  4. Opret en virtuel Android-enhed, og indstil målmiljøet som Android 2.3.3. API niveau 10.

Android-projektet

Vi opretter et eksempel på et Android-projekt for at modtage RSS-feedet.

  1. Vælg din formørkelse IDE Fil -> Ny.
  2. Vælg Ny Android -> Android Project, og klik derefter på Næste.
  3. I vinduet Nyt Android-projekt skal du angive et projektnavn (RSSFeed).
  4. Vælg Android Platform 2.3 API 10 til dit Build Target.
  5. I Egenskaber skal du angive et applikationsnavn (igen RSSFeed) og et pakkenavn (android.rss).
  6. Marker afkrydsningsfeltet: Opret aktivitet, og angiv Aktivitet klasse (RssFeed).
  7. Angiv den mindste SDK-version som 10, og klik på Næste; eller hvis du har valgt Platform 3.0 API 11, skal du angive minimum SDK-versionen som 11.

Bemærk, at en aktivitet (Trin 6) repræsenterer en brugerinteraktion. Den klasse, der udvider Aktivitet klasse opretter et vindue til et brugergrænseflade.

Det resulterende Android-projekt vil bestå af følgende filer:

  1. En aktivitetsklasse (RSSFeed), som strækker sig Aktivitet.
  2. EN res / layout / main.xml fil, der specificerer layoutet på Android UI-komponenterne.
  3. En AndroidManifest.xml fil, der indeholder applikationskonfiguration, såsom pakkenavnet, hovedaktiviteten, der skal startes, når Android-applikationen startes, applikationskomponenter, processer, tilladelser og minimum-API-niveau.

I res / layout / main.xml, angiv layoutet på Android UI-komponenterne. Lave en Lineær layout og sæt android: orientering som "lodret. "Vores mål er at vise RSS-feedet som en sms, så tilføj en TextView element til titlen på RSS-feedet og angiv android: tekst som et Google RSS-feed. Tilføj en TextView element med id "rss"for at få vist RSS-feedet. Liste 1 viser det resulterende main.xml.

Fortegnelse 1. Angivelse af layoutet på Android UI-komponenter

I AndroidManifest.xml, angiv Aktivitet at starte som RSSFeed. For at få adgang til RSS-feedet fra Internettet på en Android-enhed skal vi aktivere android.permission.INTERNET tilladelse i AndroidManifest.xml, som gør det muligt for applikationer at åbne netværksstik. Tilføj følgende bruger-tilladelse element:

Angiv den mindste Android-version med bruger-sdk element. Det RSSFeed aktivitet, den intention-filterog handling er specificeret med aktivitetselementet og underelementerne, som vist i liste 2.

Notering 2. AndroidManifest.xml

Parse RSS-feed til Android

Dernæst bruger vi javax.xml.parsers.SAXParser for at analysere vores RSS-feed. Start med at 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 på, at RSSFeed klasse udvides Aktivitet. I RSSFeed klasse, definer en variabel til output af RSS-feedet:

String rssResult = "";

Det onCreate (bundt gemtInstanceState) metode påberåbes, når aktiviteten startes. I onCreate metode, skal du indstille brugergrænsefladen ved hjælp af setContentView metode og layoutressource:

setContentView (R.layout.main);

Dernæst bruger vi findViewById metode til at definere Android-widgeten TextView objekt i main.xml:

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

Brug nu konstruktøren til URL for at specificere RSS-feed URL:

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

Bemærk, at RSS-feedet består af elementer til fodervarer. Hver består af titel, beskrivelse, link, skaberog dato underelementer.

Opret SAXParser

Lave en SAXParserFactory objekt ved hjælp af den statiske metode newInstance:

SAXParserFactory fabrik = SAXParserFactory.newInstance ();

Lave en SAXParser bruger newSAXParser metode:

SAXParser saxParser = fabrik.newSAXParser ();

Få en XMLReader fra SAXParser bruger getXMLReader metode:

XMLReader xmlReader = saxParser.getXMLReader ();

Håndtering af SAX2 begivenheder

Dernæst skal vi oprette en Standardhåndterer til at håndtere SAX2 begivenheder. SAX2-begivenheder er XML-parsing-begivenheder såsom starten og slutningen af ​​et dokument / element og karakterdata. Til Standardhåndterer, lav først en privat klasse RSSHandler der udvider Standardhåndterer klasse. Definer implementeringen af ​​begivenhedshåndteringsmetoderne startElement og tegn. Hvert feedelement er indeholdt i en element. I startElement metode, hvis localName er "element" tilføj localName til rssResult String:

rssResult = rssResult + localName + ":";

I tegn metode, tilføj karakterdataene til rssResult String. Brug udskift alle metode til at fjerne alle ekstra mellemrum i RSS-feedet:

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

I onCreate metode, opret en RSSHandler objekt:

RSSHandler rssHandler = ny RSSHandler ();

Indstil RSSHandler som en indholdshåndterer på XMLReader objekt ved hjælp af setContentHandler metode:

xmlReader.setContentHandler (rssHandler);

Opret en InputSource objekt fra URL'en til RSS-feedet. Åbn URL-strømmen ved hjælp af openStream metode:

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

Parse den InputSource bruger parse metode til XMLReader objekt:

xmlReader.parse (inputSource);

Indstil rssResult String genereret fra RSS-feed på TextView element:

rss.setText (rssResult);

Og med det er vi færdige. Det komplette Aktivitet klasse RSSFeed er vist i liste 3.

Notering 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; import java.net.URL; importer org.xml.sax.InputSource; importer org.xml.sax.XMLReader; importere java.io.IOException; import org.xml.sax.SAXException; importere javax.xml.parsers.ParserConfigurationException; importer org.xml.sax.Attributter; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class RSSFeed udvider aktivitet {/ ** Kaldes, når aktiviteten oprettes første gang. * / String rssResult = ""; boolsk genstand = falsk; @ Overstyr offentlig tomrum onCreate (Bundt gemtInstanceState) {super.onCreate (gemtInstansStat); setContentView (R.layout.main); TextView rss = (TextView) findViewById (R.id.rss); prøv {URL rssUrl = ny URL ("// www.javaworld.com/index.xml"); SAXParserFactory fabrik = SAXParserFactory.newInstance (); SAXParser saxParser = fabrik.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); Snor; mens (st.hasMoreElements ()) t + = st.nextElement (); returnere t; } * / private klasse RSSHandler udvider 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 {} offentlige ugyldige tegn (char [] ch, int start, int længde) kaster SAXException {String cdata = ny String (ch, start, længde); hvis (item == true) rssResult = rssResult + (cdata.trim ()). erstatteAll ("\ s +", "") + "\ t"; }}}

Kører Android-applikationen

Lad os nu se, hvad der sker, når vi kører Android-applikationen. Højreklik først på RSSFeed-applikationen i din Eclipse IDE, og vælg Kør som -> Android-applikation.

Dine resultater vil variere lidt afhængigt af konfigurationen: Hvis du har konfigureret Android Platform 11 og API 3.0, starter Platform 11 AVD. Hvis du har valgt Android-platform 10 og API 2.3, starter platform 10 AVD. Uanset hvad skal RSSFeed-applikationen vises som implementeret på den rigtige Android-enhed.

Klik nu på RSSFeed-applikationen for at få vist RSS-feedet, som skal vises som vist i figur 1.

Afslutningsvis

I dette Java-tip lærte du, hvordan du opretter et RSS-feed på Android ved hjælp af SAXParser, der følger med Android SDK. Du kan ændre denne applikation til ethvert RSS-feed ved at ændre RSS-URL'en. Vi lavede også en simpel øvelse i formatering af RSS-feedet ved at fjerne ekstra mellemrum mellem de anførte artikler.

Deepak Vohra er en Sun-certificeret Java-programmør, Sun-certificeret webkomponentudvikler og har tidligere offentliggjort artikler om XML Journal, Java Developer's Journal, WebLogic Journal og Java.net.

Lær mere om dette emne

Lær mere om Android.

  • Download Android SDK.
  • Download Android Development Tools (ADT).
  • Download JDK
  • Download den nyeste version af Eclipse til Java EE.

Mere fra JavaWorld

  • Tjek JavaWorlds Mobile Java-forskningszone for flere artikler som denne.
  • Se JavaWorld-sitekortet for en komplet liste over forskningscentre, der er fokuseret på Java-udviklingsværktøjer og emner på klientsiden, virksomheden og kernen.
  • JavaWorlds Java Technology Insider er en podcast-serie, der lader dig lære af Java-teknologieksperter på vej til arbejde.

Denne historie, "Java Tip: Opret et RSS-feed til din Android-applikation" blev oprindeligt udgivet af JavaWorld.