版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
題目android課程設(shè)計——新聞客戶端姓名:學(xué)號:專業(yè):學(xué)院:指導(dǎo)教師:二零一八年十一月一、需求分析啟動程序后可以進行新聞資訊的實時更新,可分不同的欄目讓使用者了解任意感興趣的資訊進行閱讀,啟動程序后可以進行新聞資訊的實時更新,可分不同的欄目讓使用者了解任意感興趣的資訊進行閱讀。1)啟動應(yīng)用程序;2)設(shè)置界面:采用多種布局嵌套,美化控件。3)顯示界面:模仿網(wǎng)易新聞客戶端進行UI編寫。4)詳細界面:分為頭條、國內(nèi)、國際、財經(jīng)、科技、社會等板塊從用戶的角度出發(fā),針對用戶的需求,所涉及的程序響應(yīng)速度快、信息處理速度快、平安性高是用戶所需要的三大主要性能,另外為了受眾面更廣,根據(jù)目前的android設(shè)備系統(tǒng)版本的分布情況,android2.3以上的版本占到設(shè)備總量的80%以上,所以做開發(fā)的時候選擇的android系統(tǒng)最低版本也必須是android2.3以上來保證用戶量。二、概要設(shè)計〔一〕開發(fā)環(huán)境采用windows+Eclipse+ADT的環(huán)境進行開發(fā),在Android2.3以上版本的系統(tǒng)中運行的?!捕诚到y(tǒng)流程軟件分為了兩大模塊,分別是新聞客戶端模塊和效勞器模塊。a〕客戶端顧名思義就是前臺框架設(shè)計,模仿了網(wǎng)易新聞的app,界面設(shè)計參考的是github網(wǎng)站的前輩;備注:翻開后界面默認為“頭條〞界面b〕效勞器這里值得一提的是做成了抓取各新聞網(wǎng)站,解析出新聞呈現(xiàn)給前臺,用的是jsoup.jar獲取和htmlparser.jar解析,有點復(fù)雜了,但還好有使用方法,能直接拿過來用。1.jsoup.jar獲取〔參考:〕將下載下來的jar包放到放到Android工程中l(wèi)ibs目錄下,加以編寫即可:Stringhtml="<html><head><title>Firstparse</title></head>"+"<body><p>ParsedHTMLintoadoc.</p></body></html>";Documentdoc=Jsoup.parse(html);上面這個例子比擬簡單,直接就將html轉(zhuǎn)換成Document實例了,之后再解析2.htmlparser.jar解析〔參考:〕網(wǎng)頁解析模塊要實現(xiàn)兩大功能:1.從頁面中提取出子鏈接,參加到爬取url隊列中;2.解析網(wǎng)頁內(nèi)容,與主題進行相關(guān)度計算。具體步驟如下:a.讀取html文件,獲得頁面編碼,獲得String格式的文件內(nèi)容b.用頁面編碼實例化html文件的Parserc.對需要提取的結(jié)點設(shè)置相應(yīng)的Filterd.根據(jù)給定的Filter,用Parser解析html文件e.提取結(jié)點中的文本內(nèi)容,進行處理三、設(shè)計與實現(xiàn)〔一〕布局設(shè)計主要設(shè)計了三個界面:全局界面、新聞列表顯示界面、詳細新聞界面a.全局界面〔main.xml〕<?xmlversion="1.0"encoding="utf-8"?>android"xmlns:tools="://schemas.android/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/bg_title_bar"android:orientation="vertical"tools:context=".Main"><LinearLayoutandroid:id="@+id/title_layout"android:layout_width="fill_parent"android:layout_height="20dp"android:background="@drawable/public_titlebar_bg"android:orientation="horizontal"><TextViewandroid:id="@+id/textView_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="@string/app_name"android:textColor="#000"android:textSize="12sp"/></LinearLayout><LinearLayoutandroid:id="@+id/main_type_title"android:layout_width="wrap_content"android:layout_height="50dip"android:layout_gravity="center_vertical"android:orientation="horizontal"><HorizontalScrollViewandroid:id="@+id/main_scroll"android:layout_width="0dip"android:layout_height="50dip"android:layout_weight="1"android:scrollbars="none"><LinearLayoutandroid:id="@+id/main_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:orientation="horizontal"></LinearLayout></HorizontalScrollView><Buttonandroid:id="@+id/main_speak"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10dip"android:layout_marginRight="10dip"android:background="@drawable/bg_read_button_select"android:gravity="right|center_vertical"android:paddingRight="10dip"android:text="@string/button_text_read"android:textColor="#FFFFFFFF"/></LinearLayout>android:id="@+id/main_page"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"android:background="#FF000000"/></LinearLayout>b.新聞列表顯示界面(list_item.xml)ListView是Android系統(tǒng)自帶的控件之一,它的使用同樣是十分廣泛的,它通常用來加載一系列相同布局的列表。使用它同樣需要一個PagerAdapter適配器來給它提供數(shù)據(jù)。從新聞列表的特征來看,顯然是由一個ListView來實現(xiàn)的。但是為了在滑動ListView的時候,帶動ViewPager一起滑動,那么需要自定義一個控件,來講廣告輪播條的ViewPager和新聞列表的ListView關(guān)聯(lián)起來。而大局部的新聞軟件都有上拉刷新和下拉加載更多的功能,所以在此自定義控件中也應(yīng)加上上拉刷新和下拉加載更多的功能。此自定義控件繼承了ListView類,實現(xiàn)了OnScrollListener,android.widget.AdapterView.OnItemClickListener接口。c.詳細新聞界面(detail.xml)新聞詳情頁即是點擊新聞進入后的頁面,使用一個ScrollView來實現(xiàn)。在新聞詳情頁中,用戶可以點擊返回按鈕返回到前一頁面?!捕彻δ軐崿F(xiàn)a.主新聞頁面的設(shè)計與實現(xiàn)定義出頁面所需要用到的控件以及新聞欄目的適配器〔如右圖〕,然后初始化界面布局、標題等:protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); initLayout(); initViewPage(); initTitle(); }b.新聞詳細頁面的設(shè)計與實現(xiàn):c.數(shù)據(jù)接口:publicclassDataAdapterextendsBaseAdapter{ ContextmContext=null; LayoutInflaterinflater; List<NewsBrief>newsData=newArrayList<NewsBrief>(); publicDataAdapter(Contextcontext,List<NewsBrief>nList){ mContext=context; inflater=LayoutInflater.from(context); newsData=nList; } @Override publicintgetCount(){ returnnewsData.size(); } @Override publicObjectgetItem(intarg0){ returnnull; } @Override publiclonggetItemId(intposition){ return0; } @Override publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ HolderViewhView=null; if(null==convertView){ hView=newHolderView(); 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){ Stringstr=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); } returnconvertView; } publicclassHolderView{ privateImageViewimage=null; privateImageViewspeak=null; privateTextViewtitle=null; privateTextViewbrief=null; privateTextViewwhere=null; privateTextViewdate=null; }}d.數(shù)據(jù)獲?。豪胘soup和htmlparser抓緊并解析新聞,下面為解析騰訊新聞頁面:publicclassNetUtil{publicstaticList<NewsBrief>DATALIST=newArrayList<NewsBrief>();publicstaticString[][]CHANNEL_URL=newString[][]{newString[]{"://news.qq/world_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/society_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},newString[]{"://news.qq/china_index.shtml","://news.qq"},};publicstaticintgetTechNews(List<NewsBrief>techData,intcId){intresult=0;try{NodeFilterfilter=newAndFilter(newTagNameFilter("div"),newHasAttributeFilter("id","listZone"));Parserparser=newParser();parser.setURL(CHANNEL_URL[cId][0]);parser.setEncoding(parser.getEncoding());NodeListlist=parser.extractAllNodesThatMatch(filter);for(inti=0;i<list.size();i++){Tagnode=(Tag)list.elementAt(i);for(intj=0;j<node.getChildren().size();j++){try{Stringtextstr=node.getChildren().elementAt(j).toHtml();if(textstr.trim().length()>0){NodeFiltersubFilter=newTagNameFilter("p");ParsersubParser=newParser();subParser.setResource(textstr);NodeListsubList=subParser.extractAllNodesThatMatch(subFilter);NodeFiltertitleStrFilter=newAndFilter(newTagNameFilter("a"),newHasAttributeFilter("class","linkto"));ParsertitleStrParser=newParser();titleStrParser.setResource(textstr);NodeListtitleStrList=titleStrParser.extractAllNodesThatMatch(titleStrFilter);intlinkstart=titleStrList.toHtml().indexOf("href=\"");intlinkend=titleStrList.toHtml().indexOf("\">");inttitleend=titleStrList.toHtml().indexOf("</a>");Stringlink=CHANNEL_URL[cId][1]+titleStrList.toHtml().substring(linkstart+6,linkend);Stringtitle=titleStrList.toHtml().substring(linkend+2,titleend);NewsBriefnewsBrief=newNewsBrief();newsBrief.setTitle(title);newsBrief.setUrl(link);newsBrief.setSummary(subList.asString());techData.add(newsBrief);}}catch(Exceptione){e.printStackTrace();}}}}catch(Exceptione){result=1;e.printStackTrace();}returnresult;}publicstaticintgetTechNews2(List<NewsBrief>techData,intcId){intresult=0;try{//查詢://tech.qq/tech_yejie.htm頁面滾動新聞的標簽以及IDNodeFilterfilter=newAndFilter(newTagNameFilter("div"),newHasAttributeFilter("id","listZone"));Parserparser=newParser();parser.setURL(CHANNEL_URL[cId][0]);parser.setEncoding(parser.getEncoding());//獲取匹配的fileter的節(jié)點NodeListlist=parser.extractAllNodesThatMatch(filter);StringBuilderNewsStr=newStringBuilder("<table>");//新聞表格字符串for(inti=0;i<list.size();i++){Tagnode=(Tag)list.elementAt(i);for(intj=0;j<node.getChildren().size();j++){Stringtextstr=node.getChildren().elementAt(j).toHtml().trim();if(textstr.length()>0){intlinkbegin=0,linkend=0,titlebegin=0,titleend=0;while(true){linkbegin=textstr.indexOf("href=",titleend);//截取鏈接字符串起始位置//如果不存在href了也就結(jié)束了if(linkbegin<0)break;linkend=textstr.indexOf("\">",linkbegin);//截取鏈接字符串結(jié)束位置Stringsublink=textstr.substring(linkbegin+6,linkend);Stringlink=CHANNEL_URL[cId][1]+sublink;titlebegin=textstr.indexOf("\">",linkend);titleend=textstr.indexOf("</a>",titlebegin);Stringtitle=textstr.substring(titlebegin+2,titleend);NewsStr.append("\r\n<tr>\r\n\t<td><atarget=\"_blank\"href=\""+link+"\">");NewsStr.append(title);NewsStr.append("</a></td></tr>");NewsBriefnewsBrief=newNewsBrief();newsBrief.setTitle(title);newsBrief.setUrl(link);techData.add(newsBrief);}}}}}catch(Exceptione){result=1;e.printStackTrace();}returnresult;}publicstaticintparserURL(Stringurl,NewsBriefnewsBrief){intresult=0;try{Parserparser=newParser(url);NodeFiltercontentFilter=newAndFilter(newTagNameFilter("div"),newHasAttributeFilter("id","Cnt-Main-Article-QQ"));NodeFilternewsdateFilter=newAndFilter(newTagNameFilter("span"),newHasAttributeFilter("class","article-time"));NodeFilternewsauthorFilter=newAndFilter(newTagNameFilter("span"),newHasAttributeFilter("class","color-a-1"));NodeFilterimgUrlFilter=newTagNameFilter("IMG");newsBrief.setContent(parserContent(contentFilter,parser));parser.reset();//記得每次用完parser后,要重置一次parser。要不然就得不到我們想要的內(nèi)容了。newsBrief.setPubDate(parserDate(newsdateFilter,parser));parser.reset();newsBrief.setSource(parserAuthor(newsauthorFilter,parser));parser.reset();newsBrief.setImgUrl(parserImgUrl(contentFilter,imgUrlFilter,parser));}catch(Exceptione){result=1;e.printStackTrace();}returnresult;}privatestaticStringparserContent(NodeFilterfilter,Parserparser){Stringreslut="";try{NodeListcontentList=(NodeList)parser.parse(filter);//將DIV中的標簽都去掉只留正文reslut=contentList.asString();}catch(Exceptione){e.printStackTrace();}returnreslut;}privatestaticStringparserDate(NodeFilterfilter,Parserparser){Stringreslut="";try{NodeListdatetList=(NodeList)parser.parse(filter);//將DIV中的標簽都去掉只留正文reslut=datetList.asString();}catch(Exceptione){e.printStackTrace();}returnreslut;}privatestaticStringparserAuthor(NodeFilterfilter,Parserparser){Stringreslut="";try{NodeListauthorList=(NodeList)parser.parse(filter);//將DIV中的標簽都去掉只留正文reslut=authorList.asString();}catch(Exceptione){e.printStackTrace();}returnreslut;}privatestaticList<String>parserImgUrl(NodeFilterbodyfilter,NodeFilterfilter,Parserparser){List<String>reslut=newArrayList<String>();try{NodeListbodyList=(NodeList)parser.parse(bodyf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑學(xué)咨詢行業(yè)市場調(diào)研分析報告
- 充電樁智能管理行業(yè)營銷策略方案
- 公司治理法律服務(wù)行業(yè)經(jīng)營分析報告
- 印刷機用盤紙產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 女式披肩產(chǎn)品供應(yīng)鏈分析
- 安排舉辦和組織專家討論會行業(yè)相關(guān)項目經(jīng)營管理報告
- 室內(nèi)用空氣芳香劑產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 木片切削機產(chǎn)品供應(yīng)鏈分析
- 寬頂無沿圓帽產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 工業(yè)用封口機產(chǎn)品供應(yīng)鏈分析
- CNAS-GL024:2018《司法鑒定法庭科學(xué)鑒定過程的質(zhì)量控制指南》
- 全新版大學(xué)英語綜合教程1Unit3課件.ppt
- 國家標準-》印制電路板設(shè)計規(guī)范
- 哈爾濱醫(yī)科大學(xué)附屬第一醫(yī)院ppt課件
- ALC板工程施工組織設(shè)計方案
- 年柴油原油換熱器設(shè)計處理量27215;05噸年柴油原油換熱器設(shè)計
- 理論力學(xué)試題題目含參考答案
- 《紅樓夢》21-25內(nèi)容簡介ppt課件
- 在線檢測系統(tǒng)操作手冊
- 設(shè)計質(zhì)量保證體系及措施(完整版)
- 吉林省延邊州高三下學(xué)期質(zhì)量檢測理科綜合(朝語)試題及答案
評論
0/150
提交評論