0% found this document useful (0 votes)
136 views43 pages

Android Chapter18 Internet Feeders

Android Development BY: Victor Matos, Cleveland State University

Uploaded by

X Man
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
136 views43 pages

Android Chapter18 Internet Feeders

Android Development BY: Victor Matos, Cleveland State University

Uploaded by

X Man
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 43

18

Android Internet Feeders


Victor Matos
Cleveland State University
Notes are based on:
Android Developers http://developer.android.com/index.html

18. Android Internet Feeders

Internet
Communicating Via Internet

The image illustrates Year 2007 Internet Density. Colored dots represent number of IP addresses per dot-area. Source: www.ipligence.com/worldmap/internet-map.jpg
2

18. Android Internet Feeders

Internet
Communicating Via Internet
2007 - Breakdown by Geographic Area
Geographic area Africa Antarctica Asia Caribbean Central America Europe Middle East North America Oceania South America Number of IP addresses 40241664 15620 371297015 1681866 0.063% 2557340 0.097% 569838903 12011131 1481754661 76417711 93409304 Percentage 1.519% 0.001% 14.015%

The image illustrates 2007 Internet density. Colored dots represent number of IP addresses per dot-area.

21.510% 0.453% 55.932% 2.885% 3.525%

Source: www.ipligence.com

18. Android Internet Feeders

Internet
USA & Worldwide Growth of Cellular Telephony
Figure taken from I am OK - A Conceptual Model for a Global Emergency System and Its Societal Impact (2007). Victor Matos and Ben Blake. International Journal of Technology Knowledge and Society. Vol. 2 No. 5 pp.7-18 January 2007.

18. Android Internet Feeders

Internet
Study on Information & Communication Technology (ICT).
World Bank Organization 2009
CONCLUSION
1. Countries that have taken steps to create a competitive market environment for ICT generally have a larger share of people using ICT services than those that have not. 2. One important outcome of competition is that it lowers prices for ICT services. 3. But while prices are falling rapidly ICT services are still unaffordable for many people in low-income countries. 4. As a result a large share of the population in these countries has yet to realize the potential of ICT for economic and social development. 5. Among ICT services voice communications particularly mobile telephony has led the way. 6. Access to new services such as broadband remains limited in developing countries. 7. Yet the expansion of broadband networks plays a catalytic role in the development of trade and egovernment. 8. In some developing countries trade in ICT goods and services has sparked export-led growth and job creation. 9. ICT applications are also transforming how governments deliver public services to citizens and businesses.
Source: Key Trends in ICT Development by David A. Cieslikowski Naomi J. Halewood Kaoru Kimura and Christine Zhen-Wei Qiang World Bank Organization 2009. http://siteresources.worldbank.org/EXTIC4D/Resources/5870635-1242066347456/IC4D_2009_Key_Trends_in_ICT_Deelopment.pdf

18. Android Internet Feeders

Internet
Background: RSS
RSS (most commonly translated as Really Simple Syndication but sometimes Rich Site Summary) is a family of web feed formats used to publish frequently updated workssuch as blog entries, news headlines, weather reports, audio and videoin a standardized format. An RSS document (which is called a web feed or channel) includes full or summarized text (plus metadata), publishing dates and authorship.

Notes Content distributors expose web feeds allowing users to subscribe to them.
Making a collection of web feeds accessible in one spot is known as aggregation which is performed by an Internet aggregator.

18. Android Internet Feeders

Internet
Background: Web Feeds
Web feeds allow (client) software programs to check for summary updates published on a website. First version of RSS was created by Netscape around 1999. A typical news feed (or channel) contains entries which may be: headlines, full-text articles excerpts, summaries, Thumbnails, and/or links to content on a website along with various metadata The Atom Syndication Format and RSS2.0 are common XML standards used to organize, create and update web feeds (these formats have been adopted by Google, Yahoo!, Apple/iTunes, CNN, NY Times,).
7

18. Android Internet Feeders

Internet
Background: Web Feeds
Common child elements of Channel and Item
Elements
LastMod Title Abstract Author Publisher Copyright PublicationDate Logo Keywords Category Ratings Schedule UserSchedule

Description
Last modified date for this web page

Type
ISO 8601:1988 Date

# allowed
0 or 1 0 or 1 0 or 1 Any Any 0 or 1 0 or 1 Any Any Any Any 0 or 1 0 or 1 8

Title String Short description summarizing the article (200 characters String or less recommended) Author Publisher Copyright Publication Date Visual Logo for channel Comma delimited keywords that match this channel String String String String Logo element String

A category to which this web page belongs in. The string Category element value is a URI to a CategoryDef element. Rating of the channel by one or more ratings services. (String found in PICS label meta tag.) Schedule for keeping channel up to date Reference to a client/user specified schedule String Schedule element UserSchedule element

Reference: http://www.w3.org/TR/NOTE-CDFsubmit.html

18. Android Internet Feeders

Internet
Background: Web Feeds
Elements of <item> A channel may contain any number of <item>s. An item may represent a "story" -- much like a story in a newspaper or magazine.
Element title link description author category comments enclosure guid pubDate source Description The title of the item. The URL of the item. The item synopsis. Email address of the author of the item. Includes the item in one or more categories. URL of a page for comments relating to the item. Describes a media object that is attached to the item. A string that uniquely identifies the item. Indicates when the item was published. The RSS channel that the item came from.

Reference: http://www.w3.org/TR/NOTE-CDFsubmit.html

18. Android Internet Feeders

Internet
Background: Web Feeds
Example:
<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>RSS Title</title> <description>This is an example of an RSS feed</description> <link>http://www.someexamplerssdomain.com/main.html</link> <lastBuildDate>Mon, 06 Sep 2010 00:01:00 +0000 </lastBuildDate> <pubDate>Mon, 06 Sep 2009 16:45:00 +0000 </pubDate>

<item>
<title>Example entry</title> <description>Here is some text containing an interesting description of the thing to be described. </description> <link>http://www.wikipedia.org/</link> <guid>unique string per item</guid> <pubDate>Mon, 06 Sep 2009 16:45:00 +0000 </pubDate> </item> </channel> </rss>
Source: http://en.wikipedia.org/wiki/RSS

10

18. Android Internet Feeders

Internet Feeders
RSS Sources
US weather: http://www.weather.gov/view/national.php?map=on The Weather Channel http://rss.weather.com/weather/rss/local/44114?cm_ven=LWO& cm_cat=rss&par=LWO_rss World weather http://www.rssweather.com/dir News http://www.npr.org/rss/ http://www.cnn.com/services/rss/ http://news.bbc.co.uk/2/hi/help/3223484.stm http://www.nytimes.com/services/xml/rss/nyt/GlobalHome.xml Money Exchange http://themoneyconverter.com/RSSFeeds.aspx Entertainment http://www.nbclosangeles.com/rss/ http://www.movies.com/rss/ RSS Aggregator http://www.rss-network.com/ http://www.nytimes.com/services/xml/rss/index.html

Consumer

Internet

Application

Corporate http://www.toyota.co.jp/en/rss/rss-responsibility.html http://home3.americanexpress.com/corp/rss/ http://www.aa.com/i18n/urls/rss.jsp

11

18. Android Internet Feeders

How do RSS feeds look like when using a browser?


NPR National Public Radio (17-Oct-2009)
http://www.npr.org/rss/

12

18. Android Internet Feeders

Internet Feeders
XML Version of the NPR RSS Feed (1/3 just a fragment!)
<?xml version="1.0"?> <?xml-stylesheet title="XSL_formatting" type="text/xsl" href="/include/xsl/rss.xsl"?> <rss xmlns:npr="http://www.npr.org/rss/" xmlns:nprml="http://api.npr.org/nprml" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"> <channel> <title>NPR Topics: Science</title> <link>http://www.npr.org/templates/story/story.php?storyId=1007&amp;ft=1&amp;f=1007</link> <description>The latest health and science news. Updates on medicine, healthy living, nutrition, drugs, diet, and advances in science and technology. Subscribe to the Health &amp; Science podcast.</description> <copyright>Copyright 2009 NPR - For Personal Use Only</copyright> <generator>NPR API RSS Generator 0.93</generator> <lastBuildDate>Sat, 17 Oct 2009 14:38:00 -0400</lastBuildDate> <image> <url>http://media.npr.org/images/npr_news_123x20.gif</url> <title>Science</title> <link>http://www.npr.org/templates/story/story.php?storyId=1007&amp;ft=1&amp;f=1007</link> </image> 13

18. Android Internet Feeders

Internet Feeders
XML Version of the NPR RSS Feed ( 2/3 just a fragment!)
<item> <title>California Develops Earthquake Early-Warning System</title> <description>Lives may be saved with an earthquake early-warning system &amp;mdash; the kind that's already in place in Japan and Mexico. But here in the U.S., such a system is still several years away.</description> <pubDate>Sat, 17 Oct 2009 14:38:00 -0400</pubDate> <link>http://www.npr.org/templates/story/story.php?storyId=113877510&amp;ft=1&amp;f=1007</link> <guid>http://www.npr.org/templates/story/story.php?storyId=113877510&amp;ft=1&amp;f=1007</guid> <content:encoded><![CDATA[<p>Lives may be saved with an earthquake early-warning system &mdash; the kind that's already in place in Japan and Mexico. But here in the U.S., such a system is still several years away.</p><p><a href="http://www.npr.org/templates/email/emailAFriend.php?storyId=113877510">&raquo; E-Mail This</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://del.icio.us/post?url= https%3A%2F%2Ffanyv88.com%3A443%2Fhttp%2Fwww.npr.org%2Ftemplates%2Fstory%2Fstory.php%3FstoryId%3D113877510">&raquo; Add to Del.icio.us</a></p>]]></content:encoded> </item>

Many <ITEM>s were intentionally removed to fit page size


14

18. Android Internet Feeders

Internet Feeders
XML Version of the NPR RSS Feed ( 3/3 just a fragment!)
<item> <title>Mapping The Boundaries Of The Solar System</title> <description>NASA launched the Interstellar Boundary Explorer (IBEX) spacecraft last year to investigate the edges of the heliosphere &amp;mdash; the insulating bubble the sun creates around the solar system. IBEX principal investigator David McComas reports on the first surprising results.</description> <pubDate>Fri, 16 Oct 2009 13:19:00 -0400</pubDate> <link>http://www.npr.org/templates/story/story.php?storyId=113870291&amp;ft=1&amp;f=1007</link> <guid>http://www.npr.org/templates/story/story.php?storyId=113870291&amp;ft=1&amp;f=1007</guid> <content:encoded><![CDATA[<p>NASA launched the Interstellar Boundary Explorer (IBEX) spacecraft last year to investigate the edges of the heliosphere &mdash; the insulating bubble the sun creates around the solar system. IBEX principal investigator David McComas reports on the first surprising results.</p> <p><a href="http://www.npr.org/templates/email/emailAFriend.php?storyId=113870291">&raquo; E-Mail This</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://del.icio.us/post? url=https%3A%2F%2Ffanyv88.com%3A443%2Fhttp%2Fwww.npr.org%2Ftemplates%2Fstory%2Fstory.php %3FstoryId%3D113870291">&raquo; Add to Del.icio.us</a></p>]]></content:encoded> </item> </channel> </rss> <!-- Burned on demand at 2009-10-17 10:49:43--> <!-- LIVE --> <!-- Burned 10/17/2009 10:49:43.407-->

Many <ITEM>s were intentionally removed to fit page size

15

18. Android Internet Feeders

Internet Feeders
Representing the RSS XML as a Tree
The Android API includes a DocumentBuilderFactory class to create this type of tree from an input stream

...

...

16

18. Android Internet Feeders

Internet
Document Objcet Model (DOM).
The Document Object Model (DOM) is an application programming interface API for valid HTML and well-formed XML documents. With the Document Object Model, programmers can build documents, navigate their structure, and add, modify, or delete elements and content. Android includes support for DOM managers.
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document dom = db.parse(someHttpInputStream);

17

18. Android Internet Feeders

Internet
Android includes the Apache HttpComponents API.
The HttpClient component (included in the API) facilitates building HTTP-aware client applications (such as web browsers and web services) using very small footprint .
HTTP Methods include: GET Requests a representation of the specified resource. POST Submits data to be processed to the identified resource. HEAD Same as GET but no message body. PUT Uploads a representation of the specified resource. DELETE Deletes the specified resource. TRACE Echoes back the received request. OPTIONS Returns the HTTP methods that the server supports for specified URL. CONNECT Converts the request connection to a transparent TCP/IP tunnel, usually to facilitate SSL-encrypted communication (HTTPS) through an unencrypted HTTP proxy. Status Codes: Ok, Bad Request, Not Found, 18

18. Android Internet Feeders

Internet
Putting all things together An Example Application
In this project we will develop an application to expose the material typically broadcasted by National Public Radio (NPR) in Android phones.
Internet

19

18. Android Internet Feeders

Internet
NPR Project Action Plan.
1. A little research indicates that NPR supports a number of web feeds among them the following:
Topic Top Stories U.S. News World News Business Health & Science Arts & Entertainment Politics & Society People & Places Opinion URL http://www.npr.org/rss/rss.php?id=1001 http://www.npr.org/rss/rss.php?id=1003 http://www.npr.org/rss/rss.php?id=1004 http://www.npr.org/rss/rss.php?id=1006 http://www.npr.org/rss/rss.php?id=1007 http://www.npr.org/rss/rss.php?id=1008 http://www.npr.org/rss/rss.php?id=1012 http://www.npr.org/rss/rss.php?id=1021 http://www.npr.org/rss/rss.php?id=1057

20

18. Android Internet Feeders

Internet
NPR Project Action Plan.
2. We will display the main topics in a ListView widget from which the user will make a selection. We use the associated web-feed to access the current contents of the selected category.

Choose Health & Science

21

18. Android Internet Feeders

Internet
NPR Project Action Plan.
3. The most current headlines of the selected category are displayed. The User can scroll the list and click on a particular subject. Observe that individual lines correspond to the XML <item> entries discussed earlier.

In the example we are interested in the Health & Science subject. We want to know about the efforts of mapping the Solar System.

22

18. Android Internet Feeders

Internet
NPR Project Action Plan.
4. A brief summary of the chosen topic is displayed inside a DialogBox. The user is given the option of closing the window or obtaining more information.

We want additional information, so we click the More button

23

18. Android Internet Feeders

Internet
NPR Project Action Plan.
5. The link held in the XML <item> currently displayed is given to a WebKit based Activity. We use the Internet to access the page containing the detailed subject.

We may opt for a nonmobile page version which may include a number of additional components such as audio, pictures, video, extensive text, etc.

24

18. Android Internet Feeders

Internet
Acquiring & Processing the NPR web-feed
1. Assume the RSS for Health & Science is http://www.npr.org/rss/rss.php?id=1007. The Java fragment in the next page uses the HttpComponents API. The goal of this code is to grab the feed, and create a document holding the tree parsed from the XML document. The tree will be traversed looking for <item> elements similar to those discussed earlier. Each item will be dissected and the pieces arranged into a manageable object form. Remember an <item> includes among other components <title>, <description>, <link>, <datepublication>, etc.
25

2. 3.

4.

5.

18. Android Internet Feeders

Internet
Main Programming Idea: Acquiring & Processing the NPR web-feed
// connecting to the RSS provider URL url = new URL(urlAddress); URLConnection connection = url.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection) connection;

int responseCode = httpConnection.getResponseCode();


if (responseCode == HttpURLConnection.HTTP_OK) { // get RSS-XML and make a document // holding the parse tree constructed from the input }

26

18. Android Internet Feeders

Internet
Main Programming Idea: Acquiring & Processing the NPR web-feed
// setting & opening the connection using urlAddress which is // a value such as: http://www.npr.org/rss/rss.php?id=1001 URL url = new URL(urlAddress); URLConnection connection; connection = url.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection) connection; int responseCode = httpConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { // get RSS-XML and make a document // holding the parse tree constructed from the input }
27

18. Android Internet Feeders

Main Programming Idea: Acquiring & Processing the NPR web-feed


// USE httpConnection to get XML and make a document // holding the parse tree constructed from the input InputStream in = httpConnection.getInputStream(); // define a document builder to act on incoming stream DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); // make XML parse tree for incoming RSS stream Document dom = db.parse(in); // define access nodes in the parse tree Element docEle = dom.getDocumentElement();
// look for individual news ("items" in this case) // put items in a NodeList collection (nl) NodeList nl = docEle.getElementsByTagName("item"); if ((nl != null) && (nl.getLength() > 0)) { for (int i = 0; i < nl.getLength(); i++) { dissectNode(nl, i); }// for }// if

Internet

28

18. Android Internet Feeders

Internet
NPR Project Implementation
main.xml (shows the main topics)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/widget28" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#ff000033" xmlns:android="http://schemas.android.com/apk/res /android" > <ImageView android:layout_width="70px" android:layout_height="30px" android:layout_x="2px" android:layout_y="2px" android:background="@drawable/logo_npr"> > </ImageView> <ListView android:id="@+id/myListView" android:layout_width="fill_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout> 29

18. Android Internet Feeders

Internet
NPR Project Implementation
my_simple_list_item_1.xml (shows individual rows of the ListView widget)
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/andr oid" android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:paddingLeft="10dip" android:textSize="18sp" android:minHeight="40sp" />

30

18. Android Internet Feeders

Internet
Activity1: AndroNPR.java
// display a list of main subjects for the user to choose a topic
package matos.internet; import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.Locale; import import import import import import import import import android.app.Activity; android.content.Context; android.content.Intent; android.os.Bundle; android.view.View; android.widget.AdapterView; android.widget.ArrayAdapter; android.widget.ListView; android.widget.AdapterView.OnItemClickListener;

public class AndroNPR extends Activity { ArrayAdapter<String> aa; ListView myListView; Context context; SingleNewsItem selectedNewsItem;

31

18. Android Internet Feeders

Internet
Activity1: AndroNPR.java
String [] myUrlAddress = { "http://www.npr.org/rss/rss.php?id=1001", "http://www.npr.org/rss/rss.php?id=1003", "http://www.npr.org/rss/rss.php?id=1004", "http://www.npr.org/rss/rss.php?id=1006", "http://www.npr.org/rss/rss.php?id=1007", "http://www.npr.org/rss/rss.php?id=1008", "http://www.npr.org/rss/rss.php?id=1012", "http://www.npr.org/rss/rss.php?id=1021", "http://www.npr.org/rss/rss.php?id=1057" }; String [] myUrlCaption = { "Top Stories", "U.S. News", "World News", "Business", "Health & Science", "Arts & Entertainment", "Politics & Society", "People & Places", "Opinion" }; String [] myUrlAddress2 = new String[myUrlAddressCaption.length]; String [] myUrlCaption2 = new String[myUrlAddressCaption.length];

32

18. Android Internet Feeders

Internet
Activity1: AndroNPR.java cont
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); context = getApplicationContext(); this.setTitle("NPR Headline News v0.0 " + niceDate() ); myListView = (ListView)this.findViewById(R.id.myListView); myListView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> _av, View _v, int _index, long _id) { String urlAddress = myUrlAddress[_index]; String urlCaption = myUrlCaption[_index]; //create an Intent to talk to Activity2 Intent NprNewsDetailsIntent = new Intent( AndroNPR.this, NprNewsDetails.class); //prepare a Bundle and add the data pieces to be sent Bundle myData = new Bundle(); myData.putString("urlAddress", urlAddress); myData.putString("urlCaption", urlCaption); NprNewsDetailsIntent.putExtras(myData); startActivity(NprNewsDetailsIntent); } }); 33

18. Android Internet Feeders

Internet
Activity1: AndroNPR.java cont
//bind main category list (Top News, ...) to the the listView //show list and get ready for user to click on a category int layoutID = R.layout.my_simple_list_item_1; aa = new ArrayAdapter<String>(this, layoutID , myUrlCaption); myListView.setAdapter(aa); }//onCreate

public static String niceDate() { DateFormatSymbols dfs = new DateFormatSymbols(); // to get short weekday-month_name String arrays String shortWeekdaysArray[] = dfs.getShortWeekdays(); String shortMonthArray[] = dfs.getShortMonths(); Calendar cal = Calendar.getInstance(Locale.US); int dd = cal.get(Calendar.DAY_OF_MONTH); int mm = cal.get(Calendar.MONTH); String mmText = shortMonthArray[mm]; int yy = cal.get(Calendar.YEAR); int wd = cal.get(Calendar.DAY_OF_WEEK); String wdText = shortWeekdaysArray[wd]; return ( wdText + " " + mmText + " " + dd + ", " + yy ); }// niceDate }// AndroNPR 34

18. Android Internet Feeders

Internet
Activity2: NPRNewsDetails.java
package matos.internet; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.DialogInterface.OnClickListener; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener;

35

18. Android Internet Feeders

Internet
Activity2: NPRNewsDetails.java
cont
public class NprNewsDetails extends Activity { //a main category subject has already been selected by the user //(data <"urlCaption", "urlAddress"> comes in a bundle sent // by main, access web-feed and show corresponding headlines ArrayList<SingleNewsItem> newsList = new ArrayList<SingleNewsItem>(); ArrayAdapter<String> aa; ListView myListView; String urlAddress = ""; String urlCaption = ""; SingleNewsItem selectedNewsItem; Context context = getApplication(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myListView = (ListView)this.findViewById(R.id.myListView); //create a local Intent handler (needed to process input parameters) Intent myLocalIntent = getIntent(); //grab the data bundle with all the pieces sent to us //it contains 1. url-address and 2. caption-text Bundle myBundle = myLocalIntent.getExtras(); urlAddress = myBundle.getString("urlAddress"); urlCaption = myBundle.getString("urlCaption");

36

18. Android Internet Feeders

Internet
Activity2: NPRNewsDetails.java
cont
//top caption for this screen String todayStr = AndroNPR.niceDate(); this.setTitle("NPR - " + urlCaption + " \t" + todayStr); //clicking a line shows more about selected news item myListView = (ListView)this.findViewById(R.id.myListView); myListView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> _av, View _v, int _index, long _id) { selectedNewsItem = newsList.get(_index); showNiceDialogBox(selectedNewsItem, context); } }); }//onCreate @Override protected void onResume() { super.onResume(); try { URL url = new URL(urlAddress); URLConnection connection; connection = url.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection) connection; int responseCode = httpConnection.getResponseCode(); 37

18. Android Internet Feeders

Internet
Activity2: NPRNewsDetails.java
cont
if (responseCode == HttpURLConnection.HTTP_OK) { InputStream in = httpConnection.getInputStream(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document dom = db.parse(in); Element docEle = dom.getDocumentElement(); // NodeList nl = docEle.getElementsByTagName("entry"); NodeList nl = docEle.getElementsByTagName("item"); if ((nl != null) && (nl.getLength() > 0)) { for (int i = 0; i < nl.getLength(); i++) { dissectNode(nl, i); }// for }// if }// if int layoutID = R.layout.my_simple_list_item_1; ArrayAdapter<SingleNewsItem> aaNews = new ArrayAdapter<SingleNewsItem>(this, layoutID, newsList); myListView.setAdapter(aaNews); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(context, "Trouble!!!", 1).show(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } }// onResume

38

18. Android Internet Feeders

Internet
Activity2: NPRNewsDetails.java
cont
public void dissectNode(NodeList nl, int i){ try { Element entry = (Element) nl.item(i); Element title = (Element) entry.getElementsByTagName( "title").item(0); Element description = (Element) entry.getElementsByTagName( "description").item(0); Element pubDate = (Element) entry.getElementsByTagName( "pubDate").item(0); Element link = (Element) entry.getElementsByTagName( "link").item(0); String String String String titleValue = title.getFirstChild().getNodeValue(); descriptionValue =description.getFirstChild().getNodeValue(); dateValue = pubDate.getFirstChild().getNodeValue(); linkValue = link.getFirstChild().getNodeValue();

SingleNewsItem singleItem = new SingleNewsItem( dateValue,titleValue,descriptionValue, linkValue); newsList.add(singleItem); } catch (DOMException e) { e.printStackTrace(); } }//dissectNode 39

18. Android Internet Feeders

Internet
Activity2: NPRNewsDetails.java
cont
public void showNiceDialogBox(SingleNewsItem selectedNewsItem, Context context){ //assemble a nice looking dialog box try { final Uri myLink = Uri.parse(selectedNewsItem.getLink()); AlertDialog.Builder myBuilder = new AlertDialog.Builder(this); myBuilder .setIcon(R.drawable.logo_npr) .setTitle(urlCaption) .setMessage( selectedNewsItem.getTitle() + "\n\n" + selectedNewsItem.getDescription() + "\n" ) .setPositiveButton("Close", null) .setNegativeButton("More", new OnClickListener() { public void onClick(DialogInterface dialog, int whichOne) { // use native web browsing Intent webIntent = new Intent( Intent.ACTION_VIEW, myLink); startActivity(webIntent); } })//setNegativeButton .show(); } catch (Exception e) { e.printStackTrace(); } }//showNiceDialogBox }//NprNewsDetails 40

18. Android Internet Feeders

Internet
Class: SingleNewsItem.java
package matos.internet; public class SingleNewsItem { private String pubDate; private String title; private String description; private String link; public public public public String String String String getPubDate() { return pubDate; } getTitle() { return title;} getDescription(){ return description; } getLink() { return link; }

public SingleNewsItem( String _pubDate, String _title, String _description, String _link) { pubDate = _pubDate; description = _description; title = _title; link = _link; } @Override public String toString() { return title; } } 41

18. Android Internet Feeders

Internet
manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="matos.internet" android:versionCode="1" android:versionName="1.0.0"> <application android:icon="@drawable/star_big_on" android:label="@string/app_name"> <activity android:name=".AndroNPR" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".NprNewsDetails" > </activity> </application> <uses-permission android:name="android.permission.INTERNET"/> <uses-sdk android:minSdkVersion="4" /> </manifest> 42

18. Android Internet

Internet

Questions

43

You might also like