Съвет за Java: Настройте RSS емисия за вашето приложение за Android

Използвайте SAXParser на Java, за да изтеглите и анализирате RSS емисия за Android. Този съвет за Java е за разработчици, нови за Android, и включва инструкции за настройка на среда за разработка на Android и кратък урок за приложение.

RSS емисията е XML-форматиран файл, използван за публикуване на периодично актуализирана синдикирана информация. RSS емисията може да бъде анализирана (т.е. прочетена и форматирана) с помощта на XML парсер. Java-съвместимите анализатори, използвани за синтактичен анализ на XML на Android, включват:

  • android.content.res.XmlResourceParser е парсер за изтегляне
  • Прост API за XML (SAX) се намира в org.xml.saxпакета
  • Android ROME Feed Reader е RSS четец на RSS емисии на Google за Android
  • Android Feed Reader е друг Google RSS / Atom четец на емисии за Android
  • Android-rss е лека библиотека на Android за RSS 2.0 емисии

Този съвет за Java е поетапно въведение към използването на javax.xml.parsers.SAXParserза анализиране на RSS емисия в XML формат. SAXParser е стандартен избор, тъй като е включен в API на Android в Android SDK. Ще настроим средата за разработка, ще създадем просто приложение за Android и емисия за демонстрационни цели и след това ще използваме SAXParser, за да форматираме емисията за Android. Въпреки че се предполага известно запознаване с разработването на Java приложения, този съвет е подходящ за разработчици, които са нови за Java мобилното развитие.

Настройване на средата

Предприемете следните стъпки, за да настроите средата за разработка на този проект:

  1. Инсталирайте Eclipse IDE.
  2. Инсталирайте приставката Android Tools Tools (ADT) за Eclipse. Приставката ADT за Eclipse предоставя набор от разширения за разработване на приложения за Android в Eclipse.
  3. Инсталирайте Android 2.3 SDK платформа. Android SDK предоставя инструменти за разработване на приложения за Android.
  4. Създайте виртуално устройство с Android и задайте целевата среда като Android 2.3.3. API ниво 10.

Проектът за Android

Ще създадем пример за Android проект за получаване на RSS емисия.

  1. Във вашата Eclipse IDE изберете File -> New .
  2. В New изберете Android -> Android Project , след това щракнете върху Next.
  3. В прозореца Нов проект за Android посочете име на проект (RSSFeed).
  4. Изберете Android Platform 2.3 API 10 за вашата цел на изграждане.
  5. В Properties укажете име на приложение (отново RSSFeed) и име на пакет (android.rss).
  6. Поставете отметка в квадратчето: Създаване на активност и посочете Activityкласа ( RssFeed).
  7. Посочете минималната версия на SDK като 10 и щракнете върху Напред; или, ако сте избрали API 11 на Platform 3.0, посочете минималната версия на SDK като 11.

Имайте предвид, че дадена дейност (стъпка 6) представлява взаимодействие с потребителя. Класът, който разширява Activityкласа, създава прозорец за потребителски интерфейс.

Полученият проект за Android ще се състои от следните файлове:

  1. Клас на дейност ( RSSFeed), който се разширява Activity.
  2. А ВЕИ / оформление / main.xml файл, който определя разположението на компонентите на Android UI.
  3. Файл на AndroidManifest.xml , който съдържа конфигурация на приложението като име на пакета, основната дейност, която се стартира при стартиране на приложението за Android, компоненти на приложението, процеси, разрешения и минималното ниво на API.

В res / layout / main.xml посочете оформлението на компонентите на потребителския интерфейс на Android. Създайте LinearLayoutи задайте android:orientationкато " vertical." Нашата цел е да покажем RSS емисията като текстово съобщение, така че добавете TextViewелемент за заглавието на RSS емисията и посочете android:textкато Google RSS емисия. Добавете TextViewелемент с идентификатор " rss" за показване на RSS емисията. Листинг 1 показва резултантния main.xml.

Листинг 1. Определяне на оформлението на компонентите на потребителския интерфейс на Android

В AndroidManifest.xml посочете Activityстартирането като RSSFeed. За достъп до RSS емисията от мрежата на устройство с Android трябва да android.permission.INTERNETразрешим разрешението в AndroidManifest.xml , което позволява на приложенията да отварят мрежови сокети. Добавете следния uses-permissionелемент:

Посочете минималната версия на Android с uses-sdkелемента. На RSSFeedактивност, на intent-filter, и actionсе задава с елемент активност и отделните елементи, както е показано на Обява 2.

Листинг 2. AndroidManifest.xml

Анализирайте RSS емисията за Android

След това ще използваме, за javax.xml.parsers.SAXParserда анализираме нашата RSS емисия. Започнете с импортиране на следните класове:

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

Спомнете си, че RSSFeedкласът се разширява Activity. В RSSFeedкласа дефинирайте променлива за извеждане на RSS емисията:

String rssResult = "";

В onCreate(Bundle savedInstanceState)метода се извиква при стартиране на дейността. В onCreateметода задайте потребителския интерфейс, използвайки setContentViewметода и ресурса за оформление:

setContentView(R.layout.main);

След това използваме findViewByIdметода, за да дефинираме TextViewобекта на джаджа за Android в main.xml:

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

Сега използвайте конструктора за, за URLда посочите URL адреса на RSS емисията:

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

Имайте предвид, че RSS емисията се състои от елементи за елементите на емисията. Всеки се състои от title, description, link, creatorи dateпод-елементи.

Създайте SAXParser

Създайте SAXParserFactoryобект, използвайки статичния метод newInstance:

SAXParserFactory factory = SAXParserFactory.newInstance();

Създайте метод, като SAXParserизползвате newSAXParserметода:

SAXParser saxParser = factory.newSAXParser();

Получете XMLReaderот SAXParserизползващия getXMLReaderметод:

XMLReader xmlReader = saxParser.getXMLReader();

Обработка на 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.

Тази история „Съвет за Java: Настройте RSS емисия за приложението си за Android“ първоначално е публикувана от JavaWorld.