diff options
| author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:16 -0800 |
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:16 -0800 |
| commit | d4aee0c0caa00aa02d4c50ed28151591ac0456b5 (patch) | |
| tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /samples/RSSReader | |
| parent | d2f2b1d7b77d06bce8cf9340171cf6c25cd720c4 (diff) | |
| download | android_development-d4aee0c0caa00aa02d4c50ed28151591ac0456b5.tar.gz android_development-d4aee0c0caa00aa02d4c50ed28151591ac0456b5.tar.bz2 android_development-d4aee0c0caa00aa02d4c50ed28151591ac0456b5.zip | |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'samples/RSSReader')
| -rw-r--r-- | samples/RSSReader/Android.mk | 12 | ||||
| -rw-r--r-- | samples/RSSReader/AndroidManifest.xml | 35 | ||||
| -rw-r--r-- | samples/RSSReader/res/layout/rss_layout.xml | 50 | ||||
| -rw-r--r-- | samples/RSSReader/res/values/strings.xml | 23 | ||||
| -rw-r--r-- | samples/RSSReader/src/com/example/android/rssreader/RssItem.java | 80 | ||||
| -rw-r--r-- | samples/RSSReader/src/com/example/android/rssreader/RssReader.java | 599 |
6 files changed, 0 insertions, 799 deletions
diff --git a/samples/RSSReader/Android.mk b/samples/RSSReader/Android.mk deleted file mode 100644 index 6f95cb4cf..000000000 --- a/samples/RSSReader/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := samples - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := RSSReader - -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/samples/RSSReader/AndroidManifest.xml b/samples/RSSReader/AndroidManifest.xml deleted file mode 100644 index c59411d9c..000000000 --- a/samples/RSSReader/AndroidManifest.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<!-- Declare the contents of this Android application. The namespace - attribute brings in the Android platform namespace, and the package - supplies a unique name for the application. When writing your - own application, the package name must be changed from "com.example.*" - to come from a domain that you own or have control over. --> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.example.android.rssreader"> - <uses-permission android:name="android.permission.INTERNET" /> - <application android:label="RSS Reader"> - <activity android:name="RssReader"> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.DEFAULT" /> - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> - - </application> -</manifest> diff --git a/samples/RSSReader/res/layout/rss_layout.xml b/samples/RSSReader/res/layout/rss_layout.xml deleted file mode 100644 index 842f4f792..000000000 --- a/samples/RSSReader/res/layout/rss_layout.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:padding="10dip" - android:orientation="vertical"> - - <EditText android:id="@+id/urltext" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:textSize="12sp" - android:autoText="false" - android:capitalize="none" - android:text="@string/rss_layout_urltext_text" /> - - <Button android:id="@+id/download" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/rss_layout_download_text" /> - - <TextView android:id="@+id/statustext" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:autoText="false" - android:capitalize="none" - android:textSize="12sp" - android:text="@string/rss_layout_statustext_text" /> - - <ListView android:id="@android:id/list" - android:layout_width="fill_parent" - android:layout_height="0dip" - android:layout_weight="1" - android:drawSelectorOnTop="false"/> - -</LinearLayout> diff --git a/samples/RSSReader/res/values/strings.xml b/samples/RSSReader/res/values/strings.xml deleted file mode 100644 index 83b7efe5a..000000000 --- a/samples/RSSReader/res/values/strings.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<resources> - - <string name="rss_layout_urltext_text">http://rss.slashdot.org/Slashdot/slashdot</string> - <string name="rss_layout_statustext_text"></string> - <string name="rss_layout_download_text">Download</string> - -</resources> diff --git a/samples/RSSReader/src/com/example/android/rssreader/RssItem.java b/samples/RSSReader/src/com/example/android/rssreader/RssItem.java deleted file mode 100644 index e1e798acb..000000000 --- a/samples/RSSReader/src/com/example/android/rssreader/RssItem.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.example.android.rssreader; - -/** - * Simple struct class to hold the data for one rss item -- - * title, link, description. - */ -public class RssItem { - private CharSequence mTitle; - private CharSequence mLink; - private CharSequence mDescription; - - public RssItem() { - mTitle = ""; - mLink = ""; - mDescription = ""; - } - - public RssItem(CharSequence title, CharSequence link, CharSequence description) { - mTitle = title; - mLink = link; - mDescription = description; - } - - public CharSequence getDescription() { - return mDescription; - } - - public void setDescription(CharSequence description) { - mDescription = description; - } - - public CharSequence getLink() { - return mLink; - } - - public void setLink(CharSequence link) { - mLink = link; - } - - public CharSequence getTitle() { - return mTitle; - } - - public void setTitle(CharSequence title) { - mTitle = title; - } - -// If we made this class Parcelable, the code would look like... - -// public void writeToParcel(Parcel parcel) { -// parcel.writeString(mTitle.toString()); -// parcel.writeString(mLink.toString()); -// parcel.writeString(mDescription.toString()); -// } -// -// -// public static Object createFromParcel(Parcel parcel) { -// return new RssItem( -// parcel.readString(), -// parcel.readString(), -// parcel.readString()); -// } -} - diff --git a/samples/RSSReader/src/com/example/android/rssreader/RssReader.java b/samples/RSSReader/src/com/example/android/rssreader/RssReader.java deleted file mode 100644 index 2f273c400..000000000 --- a/samples/RSSReader/src/com/example/android/rssreader/RssReader.java +++ /dev/null @@ -1,599 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.example.android.rssreader; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.app.ListActivity; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.view.LayoutInflater; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.TwoLineListItem; -import android.util.Xml; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.List; - -/** - * The RssReader example demonstrates forking off a thread to download - * rss data in the background and post the results to a ListView in the UI. - * It also shows how to display custom data in a ListView - * with a ArrayAdapter subclass. - * - * <ul> - * <li>We own a ListView - * <li>The ListView uses our custom RSSListAdapter which - * <ul> - * <li>The adapter feeds data to the ListView - * <li>Override of getView() in the adapter provides the display view - * used for selected list items - * </ul> - * <li>Override of onListItemClick() creates an intent to open the url for that - * RssItem in the browser. - * <li>Download = fork off a worker thread - * <li>The worker thread opens a network connection for the rss data - * <li>Uses XmlPullParser to extract the rss item data - * <li>Uses mHandler.post() to send new RssItems to the UI - * <li>Supports onSaveInstanceState()/onRestoreInstanceState() to save list/selection state on app - * pause, so can resume seamlessly - * </ul> - */ -public class RssReader extends ListActivity { - /** - * Custom list adapter that fits our rss data into the list. - */ - private RSSListAdapter mAdapter; - - /** - * Url edit text field. - */ - private EditText mUrlText; - - /** - * Status text field. - */ - private TextView mStatusText; - - /** - * Handler used to post runnables to the UI thread. - */ - private Handler mHandler; - - /** - * Currently running background network thread. - */ - private RSSWorker mWorker; - - // Take this many chars from the front of the description. - public static final int SNIPPET_LENGTH = 90; - - - // Keys used for data in the onSaveInstanceState() Map. - public static final String STRINGS_KEY = "strings"; - - public static final String SELECTION_KEY = "selection"; - - public static final String URL_KEY = "url"; - - public static final String STATUS_KEY = "status"; - - /** - * Called when the activity starts up. Do activity initialization - * here, not in a constructor. - * - * @see Activity#onCreate - */ - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.rss_layout); - // The above layout contains a list id "android:list" - // which ListActivity adopts as its list -- we can - // access it with getListView(). - - // Install our custom RSSListAdapter. - List<RssItem> items = new ArrayList<RssItem>(); - mAdapter = new RSSListAdapter(this, items); - getListView().setAdapter(mAdapter); - - // Get pointers to the UI elements in the rss_layout - mUrlText = (EditText)findViewById(R.id.urltext); - mStatusText = (TextView)findViewById(R.id.statustext); - - Button download = (Button)findViewById(R.id.download); - download.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - doRSS(mUrlText.getText()); - } - }); - - // Need one of these to post things back to the UI thread. - mHandler = new Handler(); - - // NOTE: this could use the icicle as done in - // onRestoreInstanceState(). - } - - /** - * ArrayAdapter encapsulates a java.util.List of T, for presentation in a - * ListView. This subclass specializes it to hold RssItems and display - * their title/description data in a TwoLineListItem. - */ - private class RSSListAdapter extends ArrayAdapter<RssItem> { - private LayoutInflater mInflater; - - public RSSListAdapter(Context context, List<RssItem> objects) { - super(context, 0, objects); - - mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - /** - * This is called to render a particular item for the on screen list. - * Uses an off-the-shelf TwoLineListItem view, which contains text1 and - * text2 TextViews. We pull data from the RssItem and set it into the - * view. The convertView is the view from a previous getView(), so - * we can re-use it. - * - * @see ArrayAdapter#getView - */ - @Override - public View getView(int position, View convertView, ViewGroup parent) { - TwoLineListItem view; - - // Here view may be passed in for re-use, or we make a new one. - if (convertView == null) { - view = (TwoLineListItem) mInflater.inflate(android.R.layout.simple_list_item_2, - null); - } else { - view = (TwoLineListItem) convertView; - } - - RssItem item = this.getItem(position); - - // Set the item title and description into the view. - // This example does not render real HTML, so as a hack to make - // the description look better, we strip out the - // tags and take just the first SNIPPET_LENGTH chars. - view.getText1().setText(item.getTitle()); - String descr = item.getDescription().toString(); - descr = removeTags(descr); - view.getText2().setText(descr.substring(0, Math.min(descr.length(), SNIPPET_LENGTH))); - return view; - } - - } - - /** - * Simple code to strip out <tag>s -- primitive way to sortof display HTML as - * plain text. - */ - public String removeTags(String str) { - str = str.replaceAll("<.*?>", " "); - str = str.replaceAll("\\s+", " "); - return str; - } - - /** - * Called when user clicks an item in the list. Starts an activity to - * open the url for that item. - */ - @Override - protected void onListItemClick(ListView l, View v, int position, long id) { - RssItem item = mAdapter.getItem(position); - - // Creates and starts an intent to open the item.link url. - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(item.getLink().toString())); - startActivity(intent); - } - - /** - * Resets the output UI -- list and status text empty. - */ - public void resetUI() { - // Reset the list to be empty. - List<RssItem> items = new ArrayList<RssItem>(); - mAdapter = new RSSListAdapter(this, items); - getListView().setAdapter(mAdapter); - - mStatusText.setText(""); - mUrlText.requestFocus(); - } - - /** - * Sets the currently active running worker. Interrupts any earlier worker, - * so we only have one at a time. - * - * @param worker the new worker - */ - public synchronized void setCurrentWorker(RSSWorker worker) { - if (mWorker != null) mWorker.interrupt(); - mWorker = worker; - } - - /** - * Is the given worker the currently active one. - * - * @param worker - * @return - */ - public synchronized boolean isCurrentWorker(RSSWorker worker) { - return (mWorker == worker); - } - - /** - * Given an rss url string, starts the rss-download-thread going. - * - * @param rssUrl - */ - private void doRSS(CharSequence rssUrl) { - RSSWorker worker = new RSSWorker(rssUrl); - setCurrentWorker(worker); - - resetUI(); - mStatusText.setText("Downloading\u2026"); - - worker.start(); - } - - /** - * Runnable that the worker thread uses to post RssItems to the - * UI via mHandler.post - */ - private class ItemAdder implements Runnable { - RssItem mItem; - - ItemAdder(RssItem item) { - mItem = item; - } - - public void run() { - mAdapter.add(mItem); - } - - // NOTE: Performance idea -- would be more efficient to have he option - // to add multiple items at once, so you get less "update storm" in the UI - // compared to adding things one at a time. - } - - /** - * Worker thread takes in an rss url string, downloads its data, parses - * out the rss items, and communicates them back to the UI as they are read. - */ - private class RSSWorker extends Thread { - private CharSequence mUrl; - - public RSSWorker(CharSequence url) { - mUrl = url; - } - - @Override - public void run() { - String status = ""; - try { - // Standard code to make an HTTP connection. - URL url = new URL(mUrl.toString()); - URLConnection connection = url.openConnection(); - connection.setConnectTimeout(10000); - - connection.connect(); - InputStream in = connection.getInputStream(); - - parseRSS(in, mAdapter); - status = "done"; - } catch (Exception e) { - status = "failed:" + e.getMessage(); - } - - // Send status to UI (unless a newer worker has started) - // To communicate back to the UI from a worker thread, - // pass a Runnable to handler.post(). - final String temp = status; - if (isCurrentWorker(this)) { - mHandler.post(new Runnable() { - public void run() { - mStatusText.setText(temp); - } - }); - } - } - } - - /** - * Populates the menu. - */ - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - - menu.add(0, 0, 0, "Slashdot") - .setOnMenuItemClickListener(new RSSMenu("http://rss.slashdot.org/Slashdot/slashdot")); - - menu.add(0, 0, 0, "Google News") - .setOnMenuItemClickListener(new RSSMenu("http://news.google.com/?output=rss")); - - menu.add(0, 0, 0, "News.com") - .setOnMenuItemClickListener(new RSSMenu("http://news.com.com/2547-1_3-0-20.xml")); - - menu.add(0, 0, 0, "Bad Url") - .setOnMenuItemClickListener(new RSSMenu("http://nifty.stanford.edu:8080")); - - menu.add(0, 0, 0, "Reset") - .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - resetUI(); - return true; - } - }); - - return true; - } - - /** - * Puts text in the url text field and gives it focus. Used to make a Runnable - * for each menu item. This way, one inner class works for all items vs. an - * anonymous inner class for each menu item. - */ - private class RSSMenu implements MenuItem.OnMenuItemClickListener { - private CharSequence mUrl; - - RSSMenu(CharSequence url) { - mUrl = url; - } - - public boolean onMenuItemClick(MenuItem item) { - mUrlText.setText(mUrl); - mUrlText.requestFocus(); - return true; - } - } - - - /** - * Called for us to save out our current state before we are paused, - * such a for example if the user switches to another app and memory - * gets scarce. The given outState is a Bundle to which we can save - * objects, such as Strings, Integers or lists of Strings. In this case, we - * save out the list of currently downloaded rss data, (so we don't have to - * re-do all the networking just because the user goes back and forth - * between aps) which item is currently selected, and the data for the text views. - * In onRestoreInstanceState() we look at the map to reconstruct the run-state of the - * application, so returning to the activity looks seamlessly correct. - * TODO: the Activity javadoc should give more detail about what sort of - * data can go in the outState map. - * - * @see android.app.Activity#onSaveInstanceState - */ - @SuppressWarnings("unchecked") - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - // Make a List of all the RssItem data for saving - // NOTE: there may be a way to save the RSSItems directly, - // rather than their string data. - int count = mAdapter.getCount(); - - // Save out the items as a flat list of CharSequence objects -- - // title0, link0, descr0, title1, link1, ... - ArrayList<CharSequence> strings = new ArrayList<CharSequence>(); - for (int i = 0; i < count; i++) { - RssItem item = mAdapter.getItem(i); - strings.add(item.getTitle()); - strings.add(item.getLink()); - strings.add(item.getDescription()); - } - outState.putSerializable(STRINGS_KEY, strings); - - // Save current selection index (if focussed) - if (getListView().hasFocus()) { - outState.putInt(SELECTION_KEY, Integer.valueOf(getListView().getSelectedItemPosition())); - } - - // Save url - outState.putString(URL_KEY, mUrlText.getText().toString()); - - // Save status - outState.putCharSequence(STATUS_KEY, mStatusText.getText()); - } - - /** - * Called to "thaw" re-animate the app from a previous onSaveInstanceState(). - * - * @see android.app.Activity#onRestoreInstanceState - */ - @SuppressWarnings("unchecked") - @Override - protected void onRestoreInstanceState(Bundle state) { - super.onRestoreInstanceState(state); - - // Note: null is a legal value for onRestoreInstanceState. - if (state == null) return; - - // Restore items from the big list of CharSequence objects - List<CharSequence> strings = (ArrayList<CharSequence>)state.getSerializable(STRINGS_KEY); - List<RssItem> items = new ArrayList<RssItem>(); - for (int i = 0; i < strings.size(); i += 3) { - items.add(new RssItem(strings.get(i), strings.get(i + 1), strings.get(i + 2))); - } - - // Reset the list view to show this data. - mAdapter = new RSSListAdapter(this, items); - getListView().setAdapter(mAdapter); - - // Restore selection - if (state.containsKey(SELECTION_KEY)) { - getListView().requestFocus(View.FOCUS_FORWARD); - // todo: is above right? needed it to work - getListView().setSelection(state.getInt(SELECTION_KEY)); - } - - // Restore url - mUrlText.setText(state.getCharSequence(URL_KEY)); - - // Restore status - mStatusText.setText(state.getCharSequence(STATUS_KEY)); - } - - - - /** - * Does rudimentary RSS parsing on the given stream and posts rss items to - * the UI as they are found. Uses Android's XmlPullParser facility. This is - * not a production quality RSS parser -- it just does a basic job of it. - * - * @param in stream to read - * @param adapter adapter for ui events - */ - void parseRSS(InputStream in, RSSListAdapter adapter) throws IOException, - XmlPullParserException { - // TODO: switch to sax - - XmlPullParser xpp = Xml.newPullParser(); - xpp.setInput(in, null); // null = parser figures out encoding - - int eventType; - String title = ""; - String link = ""; - String description = ""; - eventType = xpp.getEventType(); - while (eventType != XmlPullParser.END_DOCUMENT) { - if (eventType == XmlPullParser.START_TAG) { - String tag = xpp.getName(); - if (tag.equals("item")) { - title = link = description = ""; - } else if (tag.equals("title")) { - xpp.next(); // Skip to next element -- assume text is directly inside the tag - title = xpp.getText(); - } else if (tag.equals("link")) { - xpp.next(); - link = xpp.getText(); - } else if (tag.equals("description")) { - xpp.next(); - description = xpp.getText(); - } - } else if (eventType == XmlPullParser.END_TAG) { - // We have a comlete item -- post it back to the UI - // using the mHandler (necessary because we are not - // running on the UI thread). - String tag = xpp.getName(); - if (tag.equals("item")) { - RssItem item = new RssItem(title, link, description); - mHandler.post(new ItemAdder(item)); - } - } - eventType = xpp.next(); - } - } - - // SAX version of the code to do the parsing. - /* - private class RSSHandler extends DefaultHandler { - RSSListAdapter mAdapter; - - String mTitle; - String mLink; - String mDescription; - - StringBuilder mBuff; - - boolean mInItem; - - public RSSHandler(RSSListAdapter adapter) { - mAdapter = adapter; - mInItem = false; - mBuff = new StringBuilder(); - } - - public void startElement(String uri, - String localName, - String qName, - Attributes atts) - throws SAXException { - String tag = localName; - if (tag.equals("")) tag = qName; - - // If inside <item>, clear out buff on each tag start - if (mInItem) { - mBuff.delete(0, mBuff.length()); - } - - if (tag.equals("item")) { - mTitle = mLink = mDescription = ""; - mInItem = true; - } - } - - public void characters(char[] ch, - int start, - int length) - throws SAXException { - // Buffer up all the chars when inside <item> - if (mInItem) mBuff.append(ch, start, length); - } - - public void endElement(String uri, - String localName, - String qName) - throws SAXException { - String tag = localName; - if (tag.equals("")) tag = qName; - - // For each tag, copy buff chars to right variable - if (tag.equals("title")) mTitle = mBuff.toString(); - else if (tag.equals("link")) mLink = mBuff.toString(); - if (tag.equals("description")) mDescription = mBuff.toString(); - - // Have all the data at this point .... post it to the UI. - if (tag.equals("item")) { - RssItem item = new RssItem(mTitle, mLink, mDescription); - mHandler.post(new ItemAdder(item)); - mInItem = false; - } - } - } - */ - - /* - public void parseRSS2(InputStream in, RSSListAdapter adapter) throws IOException { - SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); - DefaultHandler handler = new RSSHandler(adapter); - - parser.parse(in, handler); - // TODO: does the parser figure out the encoding right on its own? - } - */ -} |
