- 浏览: 62888 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
u014549257:
...
Apache Mina: StreamIoHandler传输文件处理 -
至尊包:
想问一下,这个官网的列子如果要兼容3.0以下的版本要怎么处理? ...
Swipe Views (水平分页)
1. AndroidManifest.xml中的activity设置:
2. RSSMainActivity:
1) 用ListView显示RSS Reader获取的数据结果
定义ListView的list layout 和 item layout
activity_postlist.xml
postitem.xml: 显示RSS的title和pubDate
RSSMainActivity.java中,添加listview。
定义RSSFeed的Model
2) 自定义Adapter, 实现listView.setAdapter的方法
3) 使用AsyncTask从后台获取数据
在RSSMainActivity中定义AsyncTask, 使用HttpURLConnection获取数据,并解析显示在 list中
在RSSMainActivity中启用onStart方法,在该方法中运行后台AsyncTask的服务
<activity android:name=".RSSMainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
2. RSSMainActivity:
1) 用ListView显示RSS Reader获取的数据结果
定义ListView的list layout 和 item layout
activity_postlist.xml
<?xml version="1.0" encoding="utf-8"?> <!-- activity_postlist.xml --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".RSSMainActivity" > <ListView android:id="@+id/postListView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
postitem.xml: 显示RSS的title和pubDate
<?xml version="1.0" encoding="utf-8"?> <!-- postitem.xml --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="5dp" android:paddingBottom="5dp" > <ImageView android:id="@+id/postThumb" android:layout_width="60dp" android:layout_height="60dp" android:src="@drawable/ic_launcher" android:scaleType="centerCrop" android:layout_marginRight="5dp"/> <TextView android:id="@+id/postTitleLabel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@id/postThumb" android:layout_toRightOf="@id/postThumb" android:maxLines="2" android:text="This is a good Post, I hope it will have 2 lines. Please give me 2 lines" android:textIsSelectable="false" android:textSize="14sp" android:ellipsize="end"/> <TextView android:id="@+id/postDateLabel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignBottom="@id/postThumb" android:layout_toRightOf="@id/postThumb" android:maxLines="1" android:text="April 12, 2013" android:textSize="10sp" /> </RelativeLayout>
RSSMainActivity.java中,添加listview。
public class RSSMainActivity extends Activity { private ArrayList<PostData> listData = new ArrayList<PostData>(); private PostItemAdapter itemAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_postlist); ListView listView = (ListView) this.findViewById(R.id.postListView); itemAdapter = new PostItemAdapter(this,R.layout.postitem, listData); listView.setAdapter(itemAdapter); } }
定义RSSFeed的Model
public class PostData { public String postThumbUrl; public String postTitle; public String postDate; }
2) 自定义Adapter, 实现listView.setAdapter的方法
public class PostItemAdapter extends ArrayAdapter<PostData> { private Activity myContext; private ArrayList<PostData> datas; static class ViewHolder{ TextView postTitleView; TextView postDateView; ImageView postThumbView; } public PostItemAdapter(Context context, int textViewResourceId, ArrayList<PostData> objects){ super(context, textViewResourceId, objects); myContext = (Activity) context; datas = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView==null){ LayoutInflater inflater = myContext.getLayoutInflater(); convertView = inflater.inflate(R.layout.postitem, null); viewHolder = new ViewHolder(); viewHolder.postThumbView = (ImageView) convertView.findViewById(R.id.postThumb); viewHolder.postTitleView = (TextView) convertView.findViewById(R.id.postTitleLabel); viewHolder.postDateView = (TextView) convertView.findViewById(R.id.postDateLabel); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } if(datas.get(position).postThumbUrl == null){ viewHolder.postThumbView.setImageResource(R.drawable.ic_launcher); } viewHolder.postTitleView.setText(datas.get(position).postTitle); viewHolder.postDateView.setText(datas.get(position).postDate); return convertView; } }
3) 使用AsyncTask从后台获取数据
在RSSMainActivity中定义AsyncTask, 使用HttpURLConnection获取数据,并解析显示在 list中
private enum RSSXMLTag{ TITLE, DATE, LINK, CONTENT, GUID, IGNORETAG; } private class RSSDataController extends AsyncTask<String, Integer, ArrayList<PostData>>{ private RSSXMLTag currentTag; @Override protected void onPostExecute(ArrayList<PostData> result) { for(int i=0;i<result.size();i++){ listData.add(result.get(i)); } itemAdapter.notifyDataSetChanged(); } @Override protected ArrayList<PostData> doInBackground(String... params) { String urlStr = params[0]; InputStream is = null; ArrayList<PostData> postDataList = new ArrayList<PostData>(); try{ URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(10*1000); connection.setConnectTimeout(10*1000); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); int response = connection.getResponseCode(); Log.d("debug", "the response is:" + response); is = connection.getInputStream(); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(is,null); int eventType = xpp.getEventType(); PostData pdData = null; SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH); while (eventType!=XmlPullParser.END_DOCUMENT){ if(eventType == XmlPullParser.START_DOCUMENT){ }else if(eventType == XmlPullParser.START_TAG){ if(xpp.getName().equals("item")){ pdData = new PostData(); currentTag = RSSXMLTag.IGNORETAG; }else if(xpp.getName().equals("title")){ currentTag = RSSXMLTag.TITLE; }else if(xpp.getName().equals("link")){ currentTag = RSSXMLTag.LINK; }else if(xpp.getName().equals("pubDate")){ currentTag = RSSXMLTag.DATE; } }else if(eventType == XmlPullParser.END_TAG){ if(xpp.getName().equals("item")){ Date postDate = dateFormat.parse(pdData.postDate); pdData.postDate = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(postDate); postDataList.add(pdData); }else{ currentTag = RSSXMLTag.IGNORETAG; } }else if(eventType == XmlPullParser.TEXT){ String content = xpp.getText(); content = content.trim(); Log.d("debug", content); if(pdData!=null){ switch (currentTag){ case TITLE: if(content.length()!=0){ if(pdData.postTitle !=null){ pdData.postTitle += content; }else{ pdData.postTitle = content; } } break; case LINK: if(content.length()!=0){ if(pdData.postThumbUrl!=null){ pdData.postThumbUrl += content; }else{ pdData.postThumbUrl = content; } } break; case DATE: if(content.length()!=0){ if(pdData.postDate !=null){ pdData.postDate += content; }else{ pdData.postDate = content; } } break; default: break; } } } eventType = xpp.next(); } }catch(MalformedURLException e){ Log.e("malformedURL error", e.getLocalizedMessage()); }catch(IOException e){ Log.e("IO error", e.getLocalizedMessage()); }catch(XmlPullParserException e){ Log.e("XmlPullParser error", e.getLocalizedMessage()); } catch (ParseException e) { Log.e("Parse error", e.getLocalizedMessage()); } return postDataList; } }
在RSSMainActivity中启用onStart方法,在该方法中运行后台AsyncTask的服务
@Override protected void onStart() { super.onStart(); RSSDataController task = new RSSDataController(); String rssUrl = "http://10.4.251.146/igrp/rssfeed.rss"; String[] params = new String[]{rssUrl}; task.execute(params); }
发表评论
-
自定义ThreadPoolExecutor
2013-09-12 13:18 2177仍旧沿用ExecutorService的例子, 修改了Asyn ... -
关于ExecutorService的使用
2013-09-11 10:18 681ExecutorService: 线程池, 顾名思义是一个调度 ... -
使用后台服务下载文件的例子
2013-09-02 11:55 2179最近做了一个DEMO, 是通过httpURLConnectio ... -
Widget的开发: 一个最简单的例子
2013-06-14 10:29 1774首先,我们来说说基本概念。通常来说, 一个widget具备以下 ... -
Nofitication的使用
2013-05-22 15:16 1035Notification的例子,请参考附件。 1. 创建N ... -
Contextual Action Mode
2013-05-13 16:05 2075我在网上查了N多文章, 结果发现,在ANDROID自带 ... -
GridView显示ICON和TEXT
2013-05-08 12:00 10191. 设置GridView的布局 <?xml ver ... -
Swipe Views (水平分页)
2013-05-07 13:36 16171. 创建activity public class Co ... -
ExpandableListFragment及其使用
2013-04-17 16:33 0xxxxxxxxxxxxxxx xxxxxxxxxxxx xx ... -
动态ActionBar
2013-04-17 16:32 1591首先介绍一下该应用的主要操作界面 1. ProvinceLay ... -
在DialogFragment中使用ExpandableList
2013-04-15 16:39 1523我本来想在ListFragment中使用Expanda ... -
Fragment开发实例
2013-03-15 12:15 1860SVN源码下载地址: https://svn.codespot ...
相关推荐
【Android RssReader源码分析】 在Android应用开发中,RSS阅读器是一种常见的应用类型,它允许用户订阅和浏览各种网站的RSS(Really Simple Syndication) feed,获取最新的新闻、博客文章或者其他信息。"android ...
Android rss reader客户端源代码,安卓编程源码实例,rss reader是一个成熟的android手机应用,这是去年版本的源代码,虽然不是最新,但对了解Android编程也是值得参考的。
【Android RSS_Reader 源码学习】 在Android开发中,RSS阅读器是一个常见的应用,它可以帮助用户订阅和浏览各种网站的RSS(Really Simple Syndication) feed,获取最新的新闻、博客文章或者其他信息。本源码学习...
【Android RSS Reader 开发详解】 在移动应用开发领域,Android平台因其开源性和广泛的应用而备受开发者喜爱。本项目是一款专为Android平台设计的RSS阅读器,它允许用户订阅并查看RSS feed,从而获取最新的新闻、...
标签“android RSS reader”进一步确认了该应用的主要功能和目标平台。它表明这个应用专注于为Android用户提供RSS阅读体验,特别是关注HackerNews的内容。 关于压缩包子文件的文件名称列表,虽然只有一个条目...
本文将深入探讨Android RSS Reader的源码,帮助开发者理解其工作原理并提升开发能力。 首先,我们需要了解RSS的结构。RSS文件通常以XML格式存在,包含一系列频道(channel)和条目(item)。每个频道代表一个网站或...
Ultimate Reader——Our Own Rss Reader 随着越来越多的Web站点对RSS的支持,RSS已经成为目前最成功的XML应用。RSS搭建了一个信息迅速传播的技术平台,使得每个人都成为潜在的信息提供和获取者。在知识爆炸的当今...
Android 手机系统的阅读器rss reader源代码,一个很棒的程序,RSS 阅读器相信大家都清楚吧,专用于RSS定阅,在电脑上已是一个成熟的应用了,本RSS Reader是运行在Google的Android手机操作系统中,对此有研究的专业...
Android-Multicategory-RSS-Reader 今天,我们为您提供了Android RSS Reader应用程序的代码。 应用程序在单独的选项卡中显示来自3个通道的RSS feed数据。 有关更多出色的教程和源代码,请访问itcuties.com。
Android News RSS Reader Source Code, It's very useful for building a database and tableview. And parsing RSS feeds.
【cpppro-android_rss_reader】项目是一个使用C++和Android技术实现的RSS阅读器应用。这个项目旨在为Android平台提供一个高效、用户友好的RSS订阅工具,帮助用户轻松获取并阅读来自不同源的新闻和博客更新。以下是该...
"ivandroid rss reader"是一款专为Android平台设计的RSS阅读器应用。RSS(Really Simple Syndication)是一种内容聚合格式,允许用户订阅并获取网站、博客或其他在线内容的更新。这款应用旨在提供便捷的方式,让用户...
【安卓Android源码——RssReader.zip】是一个包含Android应用程序源代码的压缩包,主要功能是实现RSS阅读器。RSS(Really Simple Syndication)是一种内容发布格式,常用于新闻、博客和其他在线内容的聚合,使得用户...
【标题】"SimpleReader-rss聚合阅读器Android应用源码"是针对Android平台开发的一款RSS订阅应用的源代码。这个项目旨在提供一个简洁易用的工具,帮助用户聚合并阅读来自不同来源的RSS feed,从而方便地跟踪感兴趣的...
《Android源码学习:解析RssReader应用》 在Android开发领域,理解并掌握源码是提升技术深度的重要途径。本篇文章将围绕“RssReader.zip”这一压缩包中的源码进行深入探讨,旨在帮助开发者了解如何实现一个RSS阅读...
《Android应用源码SimpleReader-rss聚合阅读器》是一个针对Android平台开发的开源项目,旨在实现RSS(Really Simple Syndication)订阅和聚合功能。通过这个应用,用户可以方便地浏览和管理来自不同RSS源的新闻、...
总的来说,"RSSReader-网易手机在线更新阅读"项目展示了Java编程语言在移动应用开发中的实际应用,涵盖了网络通信、XML解析、数据库操作、用户界面设计等多个核心领域,对于学习Android和Java开发的程序员来说,是一...
《Android应用源码SimpleReader-rss聚合阅读器详解》 SimpleReader是一款基于Android平台的RSS聚合阅读器,它能够帮助用户订阅并管理多个RSS源,方便地获取和阅读各种在线内容。通过分析其源码,我们可以深入理解...
- 示例:Awasu、FeedDemon、RSSReader等。 2. **集成式RSS阅读器**: - 特点:内嵌于已有应用程序中,如电子邮件客户端或浏览器。 - 优点:无缝集成,使用方便。 - 缺点:依赖特定应用程序,灵活性较低。 - ...
在实际开发过程中,RSSReader项目会包含以下关键组件: - `RSSParser`:解析XML数据,将RSS源转换为Java对象(如Article类),通常包含频道信息和文章信息。 - `NetworkManager`:处理网络请求,获取RSS源URL的响应...