




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题 目 android课程设计新闻客户端 姓 名: 学 号: 专 业: 学 院: 指导教师: 二零一八 年 十一月 一、需求分析启动程序后可以进行新闻资讯的实时更新,可分不同的栏目让使用者了解任意感兴趣的资讯进行阅读,启动程序后可以进行新闻资讯的实时更新,可分不同的栏目让使用者了解任意感兴趣的资讯进行阅读。1)启动应用程序; 2)设置界面:采用多种布局嵌套,美化控件。 3)显示界面:模仿网易新闻客户端进行UI编写。 4)详细界面:分为头条、国内、国际、财经、科技、社会等板块从用户的角度出发,针对用户的需求,所涉及的程序响应速度快、信息处理速度快、安全性高是用户所需要的三大主要性能,另外为了受众面更广,根据目前的android设备系统版本的分布情况,android2.3以上的版本占到设备总量的80%以上,所以做开发的时候选择的android系统最低版本也必须是android2.3以上来保证用户量。二、概要设计(一)开发环境采用windows+Eclipse+ADT的环境进行开发,在Android2.3以上版本的系统中运行的。(二)系统流程软件分为了两大模块,分别是新闻客户端模块和服务器模块。a)客户端顾名思义就是前台框架设计,模仿了网易新闻的app,界面设计参考的是github网站的前辈;备注:打开后界面默认为“头条”界面b)服务器这里值得一提的是做成了抓取各新闻网站,解析出新闻呈现给前台,用的是jsoup.jar获取和htmlparser.jar解析,有点复杂了,但还好有使用方法,能直接拿过来用。1. jsoup.jar获取(参考:/jsoup)将下载下来的jar包放到放到Android工程中 libs目录下,加以编写即可:String html = First parse + Parsed HTML into a doc.; Document doc = Jsoup.parse(html); 上面这个例子比较简单,直接就将html转换成Document实例了,之后再解析2. htmlparser.jar解析(参考:/coding-hundredOfYears/archive/2012/12/15/2819217.html)网页解析模块要实现两大功能:1.从页面中提取出子链接,加入到爬取url队列中;2.解析网页内容,与主题进行相关度计算。具体步骤如下:a.读取html文件,获得页面编码,获得String格式的文件内容b.用页面编码实例化html文件的Parserc.对需要提取的结点设置相应的Filterd.根据给定的Filter,用Parser解析html文件e.提取结点中的文本内容,进行处理三、设计与实现(一)布局设计主要设计了三个界面:全局界面、新闻列表显示界面、详细新闻界面a. 全局界面(main.xml) b. 新闻列表显示界面(list_item.xml)ListView是Android系统自带的控件之一,它的使用同样是十分广泛的,它通常用来加载一系列相同布局的列表。使用它同样需要一个PagerAdapter适配器来给它提供数据。从新闻列表的特征来看,显然是由一个ListView来实现的。但是为了在滑动ListView的时候,带动ViewPager一起滑动,则需要自定义一个控件,来讲广告轮播条的ViewPager和新闻列表的ListView关联起来。而大部分的新闻软件都有上拉刷新和下拉加载更多的功能,所以在此自定义控件中也应加上上拉刷新和下拉加载更多的功能。此自定义控件继承了ListView类,实现了OnScrollListener,android.widget.AdapterView.OnItemClickListener接口。c. 详细新闻界面(detail.xml)新闻详情页即是点击新闻进入后的页面,使用一个ScrollView来实现。在新闻详情页中,用户可以点击返回按钮返回到前一页面。(二)功能实现 a. 主新闻页面的设计与实现定义出页面所需要用到的控件以及新闻栏目的适配器(如右图),然后初始化界面布局、标题等:protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main);initLayout();initViewPage();initTitle();b. 新闻详细页面的设计与实现:c.数据接口:public class DataAdapter extends BaseAdapter Context mContext = null;LayoutInflater inflater;List newsData = new ArrayList();public DataAdapter(Context context, List nList) mContext = context;inflater = LayoutInflater.from(context);newsData = nList;Overridepublic int getCount() return newsData.size();Overridepublic Object getItem(int arg0) return null;Overridepublic long getItemId(int position) return 0;Overridepublic View getView(int position, View convertView, ViewGroup parent) HolderView hView = null;if (null = convertView) hView = new HolderView();convertView = inflater.inflate(R.layout.list_item, null);hView.image = (ImageView)convertView.findViewById(R.id.news_image);hView.speak = (ImageView)convertView.findViewById(R.id.news_speak);hView.title = (TextView)convertView.findViewById(R.id.news_title);hView.brief = (TextView)convertView.findViewById(R.id.news_brief);hView.where = (TextView)convertView.findViewById(R.id.news_where);hView.date = (TextView)convertView.findViewById(R.id.news_time);convertView.setTag(hView); else hView = (HolderView) convertView.getTag();hView.title.setText(newsData.get(position).getTitle();if(!.equals(newsData.get(position).getContent() & newsData.get(position).getContent().length()26)String str=newsData.get(position).getContent().trim().substring(0, 24);hView.brief.setText(NetUtil2.replaceBlank(str); else hView.brief.setText();if (NetUtil2.CURRENT_SPEAK.equals(newsData.get(position).getUrl() hView.speak.setVisibility(View.VISIBLE);hView.title.setTextColor(Color.RED); else hView.speak.setVisibility(View.GONE);hView.title.setTextColor(Color.WHITE);hView.where.setText(newsData.get(position).getSource();hView.date.setText(newsData.get(position).getPubDate();if (null != newsData.get(position).getImgUrl()& !.equals(newsData.get(position).getImgUrl() hView.image.setTag(newsData.get(position).getImgUrl();ImageLoader2.getInstance(mContext).loadImage(newsData.get(position).getImgUrl(), hView.image); else hView.image.setImageResource(R.drawable.icon_image_default);return convertView;public class HolderView private ImageView image = null;private ImageView speak = null;private TextView title = null;private TextView brief = null;private TextView where = null;private TextView date = null;d. 数据获取:利用jsoup和htmlparser抓紧并解析新闻,下面为解析腾讯新闻页面: public class NetUtil public static List DATALIST = new ArrayList(); public static String CHANNEL_URL = new String new String/world_index.shtml,, new String/china_index.shtml,, new String/society_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, new String/china_index.shtml,, ; public static int getTechNews(List techData, int cId) int result = 0; try NodeFilter filter = new AndFilter(new TagNameFilter(div), new HasAttributeFilter(id, listZone); Parser parser = new Parser(); parser.setURL(CHANNEL_URLcId0); parser.setEncoding(parser.getEncoding(); NodeList list = parser.extractAllNodesThatMatch(filter); for (int i = 0; i list.size(); i+) Tag node = (Tag) list.elementAt(i); for (int j = 0; j 0) NodeFilter subFilter = new TagNameFilter(p); Parser subParser = new Parser(); subParser.setResource(textstr); NodeList subList = subParser.extractAllNodesThatMatch(subFilter); NodeFilter titleStrFilter = new AndFilter(new TagNameFilter(a), new HasAttributeFilter(class, linkto); Parser titleStrParser = new Parser(); titleStrParser.setResource(textstr); NodeList titleStrList = titleStrParser.extractAllNodesThatMatch(titleStrFilter); int linkstart = titleStrList.toHtml().indexOf(href=); int linkend = titleStrList.toHtml().indexOf(); int titleend = titleStrList.toHtml().indexOf(); String link = CHANNEL_URLcId1+titleStrList.toHtml().substring(linkstart+6, linkend); String title = titleStrList.toHtml().substring(linkend+2, titleend); NewsBrief newsBrief = new NewsBrief(); newsBrief.setTitle(title); newsBrief.setUrl(link); newsBrief.setSummary(subList.asString(); techData.add(newsBrief); catch (Exception e) e.printStackTrace(); catch (Exception e) result = 1; e.printStackTrace(); return result; public static int getTechNews2(List techData, int cId) int result = 0; try / 查询/tech_yejie.htm 页面 滚动新闻的 标签 以及ID NodeFilter filter = new AndFilter(new TagNameFilter(div), new HasAttributeFilter(id, listZone); Parser parser = new Parser(); parser.setURL(CHANNEL_URLcId0); parser.setEncoding(parser.getEncoding(); / 获取匹配的fileter的节点 NodeList list = parser.extractAllNodesThatMatch(filter); StringBuilder NewsStr = new StringBuilder();/ 新闻表格字符串 for (int i = 0; i list.size(); i+) Tag node = (Tag) list.elementAt(i); for (int j = 0; j 0) int linkbegin = 0, linkend = 0, titlebegin = 0, titleend = 0; while (true) linkbegin = textstr.indexOf(href=, titleend);/ 截取链接字符串起始位置 / 如果不存在 href了 也就结束了 if (linkbegin , linkbegin);/ 截取链接字符串结束位置 String sublink = textstr.substring(linkbegin + 6,linkend); String link = CHANNEL_URLcId1 + sublink; titlebegin = textstr.indexOf(, linkend); titleend = textstr.indexOf(, titlebegin); String title = textstr.substring(titlebegin + 2,titleend); NewsStr.append(rnrnt); NewsStr.append(title); NewsStr.append(); NewsBrief newsBrief = new NewsBrief(); newsBrief.setTitle(title); newsBrief.setUrl(link); techData.add(newsBrief); catch (Exception e) result = 1; e.printStackTrace(); return result; public static int parserURL(String url,NewsBrief newsBrief) int result = 0; try Parser parser = new Parser(url); NodeFilter contentFilter = new AndFilter( new TagNameFilter(div), new HasAttributeFilter(id,Cnt-Main-Article-QQ); NodeFilter newsdateFilter = new AndFilter( new TagNameFilter(span), new HasAttributeFilter(class, article-time); NodeFilter newsauthorFilter = new AndFilter( new TagNameFilter(span), new HasAttributeFilter(class, color-a-1); NodeFilter imgUrlFilter = new TagNameFilter(IMG); newsBrief.setContent(parserContent(contentFilter,parser); parser.reset(); / 记得每次用完parser后,要重置一次parser。要不然就得不到我们想要的内容了。 newsBrief.setPubDate(parserDate(newsdateFilter,parser); parser.reset(); newsBrief.setSource(parserAuthor(newsauthorFilter, parser); parser.reset(); newsBrief.setImgUrl(parserImgUrl(contentFilter,imgUrlFilter, parser); catch (Exception e) result=1; e.printStackTrace(); return result; private static String parserContent(NodeFilter filter, Parser parser) String reslut = ; try NodeList contentList = (NodeList) parser.parse(filter); / 将DIV中的标签都 去掉只留正文 reslut = contentList.asString(); catch (Exception e) e.printStackTrace(); return reslut; private static String parserDate(NodeFilter filter, Parser parser) String reslut = ; try NodeList datetList = (NodeList) parser.parse(filter); / 将DIV中的标签都 去掉只留正文 reslut = datetList.asString(); catch (Exception e) e.printStackTrace(); return reslut; private static String parserAuthor(NodeFilter filter, Parser parser) String reslut = ; try NodeList authorList = (NodeList) parser.parse(filter); / 将DIV中的标签都 去掉只留正文 reslut = authorList.asString(); catch (Exception e) e.printStackTrace(); return reslut; private static List parserImgUrl(NodeFilter bodyfilter,NodeFilter filter, Parser parser) List reslut = new ArrayLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐作品创作与发行权转让协议
- 2025年建筑工程法规更新解析试题及答案
- 现代管理学课程安排与内容试题及答案
- 突破难关的建筑工程试题及答案技巧
- 市政学考察的重要性试题及答案分析
- 2024年春九年级历史下册第五单元冷战和美苏对峙的世界5.19亚非拉国家的新发展课后提分训练新人教版
- 2025年行政公文写作考试版图试题及答案
- 2025版合同终止协议书:辞职与解除劳动合同的规范化流程
- 2025借款合同模板2
- 2025私人委托合同范本
- 国开2024年秋《心理健康教育》形考任务1-9答案
- 电力运维管理平台方案设计
- 安全培训管理体系
- 机场地震应急处理与疏散预案
- 南京工业大学《化工废水处理》2022-2023学年第一学期期末试卷
- 《阻燃材料与技术》课件 颜龙 第3、4讲 阻燃基本理论、阻燃剂性能与应用
- 高三第二轮复习之文言翻译(李丽君)省公开课获奖课件市赛课比赛一等奖课件
- 服务礼仪培训课件
- 2024年江苏省盐城市中考语文真题
- 教辅资料进校园审批制度
- 九年级你准备好了吗崔喜利公开课获奖课件百校联赛一等奖课件
评论
0/150
提交评论