新聞App的設(shè)計與實(shí)現(xiàn)_第1頁
新聞App的設(shè)計與實(shí)現(xiàn)_第2頁
新聞App的設(shè)計與實(shí)現(xiàn)_第3頁
新聞App的設(shè)計與實(shí)現(xiàn)_第4頁
新聞App的設(shè)計與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

摘要 智能手機(jī)已經(jīng)成為了現(xiàn)代人生活中非常重要的工具,它已經(jīng)不僅僅是一種通訊工具,隨著各類App如雨后春筍般出現(xiàn),現(xiàn)在的智能手機(jī)能充分滿足人們的娛樂、學(xué)習(xí)工作、交友等等日常需求。現(xiàn)在主流的智能手機(jī)操作系統(tǒng)主要是IOS和Android,較國內(nèi)手機(jī)使用而言,以Android系統(tǒng)居多。本論文主要論述一款基于Android的新聞主題的應(yīng)用開發(fā)設(shè)計與實(shí)現(xiàn)。關(guān)鍵詞:AndroidApplication開發(fā),新聞,數(shù)據(jù)庫ABSTRACTSmartphonehasbecomeaveryimportanttoolinmodernlife,itisnotjustacommunicationtool,withallkindsofappsspringinguplikemushrooms,nowsmartphonecanfullymeetpeople'sentertainment,study,work,friendsandotherdailyneeds.NowthemainstreamsmartphoneoperatingsystemismainlyIOSandAndroid,comparedwithdomesticmobilephoneuse,toAndroidsysteminthemajority.Thispapermainlydiscussestheapplicationdesignandimplementationofanandroid-basednewstheme.Keywords:MeasuringAndroidApplicationdevelopment,news,database

目錄1 緒論 61.1 研究意義 61.2 國內(nèi)外現(xiàn)狀 61.3 論文章節(jié)結(jié)構(gòu)概述 72 Android開發(fā)相關(guān)技術(shù)介紹和環(huán)境搭建 82.1基于linux的android系統(tǒng) 82.2JAVA開發(fā)語言簡介 92.3安卓開發(fā)平臺AndroidStudio 92.4關(guān)于數(shù)據(jù)庫、json數(shù)據(jù)格式、前端開發(fā)xml文件 103 功能的具體實(shí)現(xiàn) 133.1Application的框架設(shè)計 133.2動畫頁面SplashActivity的實(shí)現(xiàn) 143.3引導(dǎo)頁面GuideActivity的實(shí)現(xiàn) 163.4主頁面MainActivity的實(shí)現(xiàn) 183.5主頁面的實(shí)現(xiàn)思路 223.6評論功能的具體實(shí)現(xiàn)方法 334 測試與分析 465 總結(jié)與展望 52參考文獻(xiàn) 53致謝 54緒論研究意義Android的軟件占有著中國智能移動端市場的大部分,它擁有著相當(dāng)?shù)目赏卣剐院蛻?yīng)用前景。新聞App作為本科畢業(yè)生畢業(yè)選題,它基于Android系統(tǒng),可以利用Java語言和PC端高效開發(fā)工具AndroidStudio進(jìn)行軟件開發(fā),這無疑為設(shè)計和編程帶來極大便利。國內(nèi)外現(xiàn)狀A(yù)ndroid系統(tǒng)誕生于2008年,出自google公司的研究團(tuán)隊。一路以來Android的發(fā)展高歌猛進(jìn),迄今它的市場占有率高達(dá)82.4%(這個數(shù)字來源于某網(wǎng)站上的調(diào)查)。由于它的開源特性,許多技術(shù)愛好者和從事開發(fā)的工作人員心之向往,從而不斷豐富它的源碼、軟件市場以及各種拓展應(yīng)用,盡管同時也會帶來大量的安全問題,然而這不會停下它發(fā)展的腳步。相比于IOS開發(fā)而言,Android開發(fā)的學(xué)習(xí)成本更低,只需要百來塊錢就可以買來一臺實(shí)驗(yàn)機(jī)器,雖然AndroidStudio開發(fā)平臺已經(jīng)提供了功能豐富的Android虛擬機(jī)可以簡化實(shí)驗(yàn)操作,不過在真機(jī)上進(jìn)行測試也是相當(dāng)必要的[12]。同時相較于IOS開發(fā)中的Swift語言,Android所使用的Java語言更為廣泛(有時也用Kotlin語言),它為使用Java語言居多的上一代手機(jī)開發(fā)工作者更好的轉(zhuǎn)型轉(zhuǎn)戰(zhàn)Android開發(fā),它也對開發(fā)新手入門更加友好。隨著Android開發(fā)體系的逐漸成熟,它的知識體系主要包括:Linux命令、SQL技術(shù)、Java框架、設(shè)計模式、Android組件調(diào)用、互聯(lián)網(wǎng)框架、硬件調(diào)用、系統(tǒng)開發(fā)以及各種高級的成型框架。相較于早先的Java開發(fā)中,我們需要頻繁地調(diào)用第三方庫或者是各種函數(shù)去創(chuàng)建視圖界面,在現(xiàn)在的Android開發(fā)UI界面更加便捷,既可以像之前一樣使用函數(shù)創(chuàng)建視圖,也可以直接利用標(biāo)簽語言編寫的xml文件完成UI界面布局的設(shè)計乃至圖片、網(wǎng)站等資源的調(diào)用。Android舊版本時代,其開發(fā)多數(shù)建立在EclipseADT上完成,而在Android7.0之后,Google公司推出了官方開發(fā)平臺AndroidStudio,因此不再更新EclipseADT。目前AndroidStudio已經(jīng)更新到3.3的版本,使用十分便捷,而Android版本更新到9.0,在今天即將邁入Andoird10.0,它優(yōu)化了權(quán)限的管理從而提高隱私的保護(hù)程度,同時優(yōu)化桌面體驗(yàn)和平板電腦的支持,甚至支持當(dāng)用戶不習(xí)慣于當(dāng)前某個Application的版本時將允許回滾至舊版本,這些更新都不斷提高著用戶體驗(yàn)??梢哉f在未來,Android系統(tǒng)的使用不僅不會減少,反而應(yīng)用愈加廣泛,而Android基礎(chǔ)開發(fā)的技術(shù)將更加簡單,開發(fā)流程和步驟更加簡潔便捷。論文章節(jié)結(jié)構(gòu)概述全文主要章節(jié)共分成五個部分:本章緒論、次章技術(shù)簡介、第三章功能實(shí)現(xiàn)和新聞Application源代碼釋義、第四章App實(shí)現(xiàn)效果以及末章總結(jié)與展望。第二章技術(shù)簡介主要涵蓋新聞App開發(fā)的全程需要用到的開發(fā)技術(shù)簡介,其中包括Android系統(tǒng)的技術(shù)簡介、開發(fā)環(huán)境搭建(包含Java、AndroidStudio)、新聞App的數(shù)據(jù)來源和處理和UI界面開發(fā)的技術(shù)簡介等。第三章依據(jù)新聞App的各個功能頁面的布局和邏輯展開研究論述。第四章將展示App的代碼實(shí)現(xiàn)效果,末章為整個項目及通篇論文作總結(jié)。

Android開發(fā)相關(guān)技術(shù)介紹和環(huán)境搭建2.1基于linux的android系統(tǒng)Android是使用最為廣泛的一種基于Linux的開源操作系統(tǒng),主要使用于各種移動設(shè)備,例如平板電腦和智能手機(jī)等,由開放手機(jī)聯(lián)盟和Google公司領(lǐng)導(dǎo)及開發(fā)。智能手機(jī)的發(fā)展和操作系統(tǒng)的進(jìn)化同步進(jìn)行著,其中android操作系統(tǒng)因?yàn)槠溟_源的特性還有其成熟的營銷模式,已經(jīng)迅捷地占領(lǐng)了市場。Anroid操作系統(tǒng)的基本架構(gòu)主要包括四層:圖2.1 android的四層結(jié)構(gòu)如圖2.1所示,其中Android的Linux內(nèi)核層包括內(nèi)存管理、安全管理、網(wǎng)絡(luò)階議棧、驅(qū)動程序模型、進(jìn)程管理、和電源管理等功能,這些都依賴于Linux內(nèi)核。由于Linux內(nèi)核全部使用C語言編寫,所以Android的Linux內(nèi)核層也全部是用C語言編寫的。系統(tǒng)運(yùn)行層通過c/c++的庫來為Android提供主要的特性的支持,例如SQLite為其提供一個對于所有的應(yīng)用程序都可而用的功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎,還有OpenGL|ES的3D繪圖支持,WebKit庫提供瀏覽器內(nèi)核的支持等等,同時該層還有androidruntime庫提供了核心庫,使開發(fā)者能夠使用java語言編寫android應(yīng)用程序。應(yīng)用框架層向構(gòu)建應(yīng)用程序的需求提供了各種API,它的作用是為各種應(yīng)用程序提供一個必須遵守的共同使用的約定,并使開發(fā)者能夠在其約束條件下進(jìn)行開發(fā),它本身就是一個框架。最后就是應(yīng)用層,即本論文完成的應(yīng)用程序所處的層次。2.2JAVA開發(fā)語言簡介Java是面向?qū)ο蟮木幊陶Z言,它吸收了C++的各種優(yōu)點(diǎn),同時摒棄了C++中難以理解的多繼承機(jī)制、指針等復(fù)雜概念,因此Java語言同時具有功能強(qiáng)大而又簡單易用的兩個特征。Java語言極好地實(shí)現(xiàn)了面向?qū)ο蟮睦碚?,允許程序員充分地以優(yōu)雅的思維方式以及結(jié)構(gòu)簡明的形式進(jìn)行復(fù)雜的編程工程。Java具有簡單、分布式、面向?qū)ο?、安全性、平臺獨(dú)立、健壯性、與可移植性、動態(tài)性、多線程等特點(diǎn)。Java可以用來編寫桌面的應(yīng)用程序、分布式系統(tǒng)、Web應(yīng)用程序和嵌入式系統(tǒng)的應(yīng)用程序等等。2.3安卓開發(fā)平臺AndroidStudioAndroidStudio是google公司推出的一款A(yù)ndroid集成開發(fā)工具,基于IntelliJIDEA。類似于

Eclipse

ADT平臺,AndroidStudio提供了自己的集成Android開發(fā)工具,便于開發(fā)和調(diào)試。在IDEA的基礎(chǔ)上,AndroidStudio提供:基于Groovy的Gradle工具用于構(gòu)建支持,適合android的語法規(guī)則的重構(gòu)和修復(fù)并提供提示工具用于捕獲幸能、版本兼容、可用性等問題,支持proguard和應(yīng)用的簽名,以及基于模板的向?qū)?,?guī)則化地生成常用的android的應(yīng)用程序組件和設(shè)計,同時還有一大亮點(diǎn),就是其強(qiáng)大的布局編輯器,讓開發(fā)者能夠從視覺上更主動更及時地預(yù)覽前端效果,還能拖拉各種UI控件(也可以是自定義的控件)來完成前端設(shè)計。效果如以下工程截圖。圖2.2 androidstudioUI設(shè)計概覽界面圖2.3 androidstudioUI設(shè)計代碼界面圖2.2和圖2.3分別展示了androidstudio的UI設(shè)計模式,雖然androidstudio非常強(qiáng)大,但是不同項目的AS版本,gradle版本以及android支持庫版本都有不同,因此在導(dǎo)入第三方項目或者庫文件,添加依賴時都需要特別注意版本問題。2.4關(guān)于數(shù)據(jù)庫、json數(shù)據(jù)格式、前端開發(fā)xml文件本文所完成的App設(shè)計與實(shí)現(xiàn),主要是完成客戶端的功能,不需要搭建服務(wù)器和復(fù)雜的新聞數(shù)據(jù)庫系統(tǒng),而現(xiàn)在處于大數(shù)據(jù)時代,大部分的App設(shè)計都采用云端服務(wù)器,由各大數(shù)據(jù)公司或者專業(yè)新聞企業(yè)提供的公用數(shù)據(jù)查詢API接口,返回格式為json文件,這位我們的軟件所需的數(shù)據(jù)接入提供了便利條件,以下列出一些本軟件需要用到的數(shù)據(jù)接口API和相關(guān)網(wǎng)址/ 聚合數(shù)據(jù)大數(shù)據(jù)平臺/ 好服務(wù)大數(shù)據(jù)平臺/categories.json以上兩款是企業(yè)提供的大數(shù)據(jù)平臺,最后一個地址是來自于github熱心網(wǎng)友提供的歸類好的新聞數(shù)據(jù)接口,數(shù)據(jù)來源于新浪新聞。關(guān)于json格式文件,由于它的解析和使用與數(shù)據(jù)庫數(shù)據(jù)庫息息相關(guān),故在此標(biāo)題下一并介紹。Json全稱為JavaScriptObjectNotation,它是一種輕量級數(shù)據(jù)交換的格式。方便于人們編寫閱讀。同時也易于計算機(jī)解析、生成。它是基于JavaScriptProgrammingLanguage,

StandardECMA-2623rdEdition-December1999的一個子集。json完全獨(dú)立于語言,同時又使用了類似C族的習(xí)慣(其中包括了C,C++,Java,JavaScript,C#,Python,Perl等)。這些特性使得json能夠成為一種理想數(shù)據(jù)交換語言。json建構(gòu)于兩種結(jié)構(gòu):其一為“名稱/值”對集合,Acollectionofname/valuepairs。不同語言中,它可以被理解為紀(jì)錄record,對象object,結(jié)構(gòu)struct,有鍵列表keyedlist字典dictionary,關(guān)聯(lián)數(shù)組associativearray,或者哈希表hashtable。其二為值的有序列表Anorderedlistofvalues。它在大部分語言中,通常被理解為數(shù)組array。這些都是各種語言中常見的數(shù)據(jù)結(jié)構(gòu)。因此,事實(shí)上大部分的現(xiàn)代計算機(jī)編程語言都以某種形式能夠支持它們。使得這樣的一種數(shù)據(jù)格式j(luò)son能在同樣基于這些數(shù)據(jù)結(jié)構(gòu)的編程語言之間進(jìn)行數(shù)據(jù)交換。json具有以下的這些形式:對象是一個無序的鍵值對集合,即key:value。一個對象以通常以花括號{},作為一個完整的結(jié)構(gòu),每一個名稱為key或者稱name,其后面跟著冒號(:),再接上相應(yīng)的值共同構(gòu)成一個鍵值對,每個鍵值對之間用逗號(,)分隔,共同構(gòu)成一個鍵值對集合。在實(shí)際的json格式中,鍵值對集合的元素對象常常不是現(xiàn)有的類,因此我們經(jīng)常需要自定義新類去適配相應(yīng)的json格式。如以下例子:PublicclassMyData{ PublicArray<MyChildData>data; PublicclassMyChildData{ Stringdata; Stringowner;}}這一種方法,成為手動寫類解析json格式,當(dāng)然也可以使用一些相關(guān)瀏覽器插件或者編程開發(fā)平臺的插件能夠更便捷地完成json格式的解析類的開發(fā)。上述的例子能夠?qū)?yīng)格式為:{data:[{data:”helloworld”,owner:”me”},{data:”nicetomeetyou”,owner:”you”}]}這種格式的json文件,應(yīng)用Gson類的fromJson(jsonData,MyData.class)方法就可以將其解析成上述自定義類格式的Gson文件了,這非常有利于我們對json文件的數(shù)據(jù)提取。前面已經(jīng)提到過,對于androidstudio而言,它的前端開發(fā)功能已經(jīng)非常強(qiáng)大的,我們可以通過五大布局和各種控件的安排和約束完成自己想要的前端頁面效果,也可以上github搜索,添加熱心網(wǎng)友提供的或者企業(yè)開源的第三方控件,當(dāng)然如果對控件和布局操作熟練的情況,也可以自定義控件。總而言之實(shí)現(xiàn)頁面設(shè)計不難,但是有涉及到列表和標(biāo)簽的控件,需要非常注意適配器的使用,否則運(yùn)行時很容易致使程序崩潰,盡管這在代碼編譯的時候不會報錯。

功能的具體實(shí)現(xiàn)3.1Application的框架設(shè)計圖3.1 軟件項目結(jié)構(gòu)如圖3.1所示,是本App的軟件項目結(jié)構(gòu),新聞應(yīng)用程序通過運(yùn)行動畫頁面SplashActivity和引導(dǎo)頁面GuideActivity部分代碼后進(jìn)入主要頁面MainActivity,主頁面包含五個子頁面,諸如首頁HomePager、新聞頁NewsCenterPager、聊天頁SmartServicePager、推薦頁RecommendPager以及設(shè)置頁SettingPager。由于界面風(fēng)格和大致框架類似,這五大頁面在Java中的代碼實(shí)現(xiàn)都基于同一個父類BasePager,以此精簡和結(jié)構(gòu)化代碼。進(jìn)入主要功能新聞中心后,可以通過點(diǎn)擊新聞標(biāo)簽進(jìn)入新聞詳情頁面。新聞詳情頁面主要以webView的形式顯示,下方可以設(shè)置按鈕,提供到發(fā)表和查看評論功能的跳轉(zhuǎn)。3.2動畫頁面SplashActivity的實(shí)現(xiàn)圖3.2 SplashActivity設(shè)置動畫集首先通過找到SplashActivity的布局,同時將旋轉(zhuǎn)動畫RotateAnimation、放縮動畫ScaleAnimation和漸變AlphaAnimation動畫同時加入動畫集set,再將動畫集set通過布局對象的startAnimation()方法開啟動畫,代碼如圖3.2所示。.圖3.3 SplashActivity設(shè)置回調(diào)方法其次,如圖3.3中可見,在使用動畫集的方法setAnimationListener()方法,在其中設(shè)置動畫開始、結(jié)束、重復(fù)時回調(diào)的處理事件,可實(shí)現(xiàn)在動畫后完成到引導(dǎo)頁面GuideActivity的跳轉(zhuǎn)。3.3引導(dǎo)頁面GuideActivity的實(shí)現(xiàn)圖3.4 GuideActivity設(shè)置適配器如圖3.4和3.5中所示代碼,滑動頁面通過v4支持包的ViewPager類實(shí)現(xiàn)引導(dǎo)頁面的三張圖片的滑動。ViewPager是個復(fù)雜的控件,它的具體內(nèi)容不會在一個頁面上完全顯示,因此需要配置適配器,如下列代碼中的GuideAdapter類,它繼承于v4支持包中已經(jīng)封裝好的PagerAdapter類,只需要重寫一些必要的方法即可,非常方便。在以后的各種復(fù)雜控件和框架中,都將有可能使用適配器,具體原理和用法不一,下文將不一一贅述。圖3.5 GuideActivity設(shè)置適配器回調(diào)方法圖3.6代碼將表現(xiàn)引導(dǎo)頁面中的紅白點(diǎn)列表如何實(shí)現(xiàn)。圖3.6 GuideActivity實(shí)現(xiàn)紅點(diǎn)和圖片滑動3.4主頁面MainActivity的實(shí)現(xiàn)基于面向?qū)ο蟮奶匦?,盡可能將MainActivity中的代碼精簡,因此將具體的功能分發(fā)到其他java包中實(shí)現(xiàn),只需提供一個initFragment()函數(shù)構(gòu)造底部按鈕列實(shí)現(xiàn)子頁面入口,如圖3.7所示,而將五大功能頁面HomePager、NewsCenterPager、SmartServicePager、RecommendPager、SettingPager抽取共性成為一個布局的基類BasePager,通過讓子頁面java程序重寫其內(nèi)部initView()、initData()方法來實(shí)現(xiàn)各個子頁面的視圖處理和數(shù)據(jù)處理。圖3.7 initFragment()以下圖3.8為ContentFragment類中的initData()、和initView()方法,用以實(shí)現(xiàn)底部RadioGroup顯示、監(jiān)聽、以及手動初始化第一次進(jìn)入程序需要加載顯示的第一個頁面(適配器和其他左側(cè)菜單的處理等細(xì)節(jié)省略)(a)節(jié)選1(b)節(jié)選2(c)節(jié)選3圖3.8 initView()和initData()3.5主頁面的實(shí)現(xiàn)思路由于主頁面已經(jīng)通過RadioGroup按鈕組將功能實(shí)現(xiàn)的工作交付給了各個子頁面,因此只需要在各個子頁面實(shí)現(xiàn)自己的功能即可,互不干擾。 無論是哪個頁面,通過分析,我們可以理清實(shí)現(xiàn)的整體思路:首先需要定義一個GlobalConstants類用來儲存需要用到的大數(shù)據(jù)平臺接口,其次通過xUtils第三方庫提供的方法訪問接口獲取json數(shù)據(jù),接著根據(jù)json格式自定義新類以適配數(shù)據(jù),然后通過google公司提供的Gson類將json格式數(shù)據(jù)轉(zhuǎn)換為gson格式數(shù)據(jù),最后在相應(yīng)的布局文件上通過繼承于BasePager的子頁面java處理程序?qū)崿F(xiàn)顯示和監(jiān)聽點(diǎn)擊事件設(shè)置跳轉(zhuǎn)頁面的邏輯,下面將描述有關(guān)于xUtils3第三方庫的簡介和基本使用:xUtils3簡介:xUtils3是一個基于Afinal開發(fā)的一個目前而言功能比較強(qiáng)大的android開源框架,在github中搜索xUtils3很容易就能找到它的源碼。它的功能主要包括:注解模塊,即為我們在開發(fā)過程中通過一種簡潔的形式編程,實(shí)現(xiàn)一些原本復(fù)雜繁瑣的添加信息的操作,例如實(shí)例化控件和綁定對象,它能非常有效地精簡代碼,減少工程量。網(wǎng)絡(luò)模塊,xUtils3的網(wǎng)絡(luò)模塊為實(shí)現(xiàn)網(wǎng)絡(luò)編程提供了極大的便利,xUtils3大致包括了POST方式請求、GET方式請求以及使用其他請求方式的方法,同時還有上傳下載文件、使用緩存等功能。圖片加載模塊,xUtils3的這個模塊的加載圖片方法主要通過4個綁定方法bind()以及l(fā)oadDrawable、loadFile和ImageOption方法實(shí)現(xiàn)。數(shù)據(jù)庫模塊,xUtils3通過配置后,還能簡單地實(shí)現(xiàn)數(shù)據(jù)庫的增刪改查以及建表、監(jiān)聽數(shù)據(jù)庫更新等各種數(shù)據(jù)庫操作。xUtils3的網(wǎng)絡(luò)請求方法:圖3.9 xUtils實(shí)現(xiàn)網(wǎng)絡(luò)請求圖3.9中代碼實(shí)現(xiàn)了簡單的網(wǎng)絡(luò)請求數(shù)據(jù)。首先我們需要實(shí)例化一個HttpUtils對象utils,同時調(diào)用該對象的send方法請求網(wǎng)絡(luò)數(shù)據(jù),send方法的第一個形參聲明了使用GET方法請求數(shù)據(jù),第二個形參需要傳入目的請求地址,這個例子使用的是我們前面提到的GlobalConstants常量儲存類的一個常量網(wǎng)址,“新浪新聞”提供的數(shù)據(jù)API接口網(wǎng)址,第三個參數(shù)傳入一個新建的RequestCallBack實(shí)例對象,它需要重寫兩個抽象方法,第一個是onSuccess()方法,該方法在請求成功時回調(diào),它將傳回請求的數(shù)據(jù)存在responseInfo中,利用responseInfo.result即可訪問該API接口返回的json格式文件,result信息是局部變量,只能在該函數(shù)中使用,我們可以在onSuccess()方法中做出對該json文件的相關(guān)處理操作,即子女自定義processData()方法,第二個需要重寫的方法是onFailure()方法,它的代碼塊通常用作請求錯誤情況的處理,本例中先通過HttpException異常處理對象的printStackTrace()方法在控制臺中輸出出錯日志,再在android設(shè)備上彈出一個Toast打印報錯字符串s。下面將描述有關(guān)于Gson類的簡介和基本使用:Gson簡介:Gson是google公司提供的一個java類庫,用于處理java對象和json格式數(shù)據(jù)之間的信息映射,它可以將json數(shù)據(jù)中的字符轉(zhuǎn)換成java的對象,或者將java轉(zhuǎn)化成json格式的字符串。Gson類具有簡潔、高效、面向?qū)ο蟆?shù)據(jù)傳遞解析方便的特點(diǎn)。Gson的基本使用:圖3.10 Gson實(shí)現(xiàn)數(shù)據(jù)解析由圖3.10中代碼可知,我們需要先實(shí)例化一個Gson對象gson,再通過調(diào)用gson的fromJson()方法,返回一個相關(guān)Gson格式的數(shù)據(jù)信息集。fromJson()方法第一個參數(shù)需要傳入代轉(zhuǎn)換的json數(shù)據(jù)流,第二個參數(shù)需要傳入的是一個能夠適應(yīng)該json格式的自定義的Gson格式類,某些情況下使用成熟的Gson轉(zhuǎn)化插件能夠幫助我們更高效快速準(zhǔn)確地完成格式類的創(chuàng)建,但手動解析json的方法步驟更值得掌握,其基本要領(lǐng)是“逢大括號{}創(chuàng)建新類、逢[]創(chuàng)建Array<>集合”。有關(guān)于格式類的代碼在后續(xù)將會提及。 有了xUtils和Gson的基礎(chǔ),我們現(xiàn)在可以一步一步地根據(jù)上述整體思路,實(shí)現(xiàn)功能。定義接口常量類GlobalConstants,如圖3.11。圖3.11 GlobalConstants常量類通過xUtils訪問接口,獲取json數(shù)據(jù),代碼如圖3.12。圖3.12 重寫請求新聞服務(wù)器方法自定義格式類,通過Gson解析json數(shù)據(jù)如圖3.13:圖3.13 調(diào)用Gson解析數(shù)據(jù)及適配根據(jù)新浪新聞的API的json返回值,我們可以自定義格式類如圖3.14:圖3.14 自定義Gson格式至此我們已經(jīng)完成了json到Gson信息的數(shù)據(jù)格式轉(zhuǎn)化,同時processData()方法的最后三行代碼完成了一個步驟,即將Gson信息中的第一組新聞數(shù)據(jù)傳入了一個新變量mMenuDetailPagers集合中,集合類型為BaseMenuDetailPager,它可以用于手動初始化第一頁新聞菜單詳情的顯示。4、將數(shù)據(jù)傳遞到新聞菜單詳情頁面并顯示。圖3.15 配置根布局的數(shù)據(jù)首先實(shí)例化一個新聞菜單詳情頁面列表類對象pager,再通過View類對象view賦值找到pager的根視圖,同時利用removeAllView()方法將布局中的內(nèi)容框的視圖全清空并將未初始化的view控件加入該視圖容器(即布局中的內(nèi)容框flContent對象所指控件),最后執(zhí)行pager的initData()方法初始化數(shù)據(jù),代碼如圖3.15。因?yàn)閜ager對象的類NewsMenuDetailPager是繼承于BaseMenuDetailPager抽象類,而又實(shí)現(xiàn)ViewPager.onPageChangeListener接口,因此它需要實(shí)現(xiàn)initData()方法,具體地實(shí)現(xiàn)各自頁面的初始化布局?jǐn)?shù)據(jù)操作,還要實(shí)現(xiàn)ViewPager的相關(guān)的指示器控件的方法。以下圖3.16為NewsMenuDetailPager類中initData()方法和initView()方法的重寫:圖3.16 新聞菜單頁面的數(shù)據(jù)和視圖初始化函數(shù)在initData()中,通過一個for循環(huán),將所有前面已經(jīng)解析出來的Gson格式數(shù)據(jù)逐個傳遞到mPagers中,然后對mViewPager復(fù)雜控件設(shè)置適配器以顯示方法,最后通過setViewPager()和setOnPageChangeListener()函數(shù)將指示器和顯示模塊綁定并設(shè)置頁面滑動的監(jiān)聽器。以下是ViewPager指示器的實(shí)現(xiàn)方法,關(guān)于頁簽指示器的需要實(shí)現(xiàn)的方法做以下說明:onPageScrolled():頁面滑動后回調(diào)。onPageSelected():頁面選中時回調(diào)。onPageScrollStateChanged():頁面狀態(tài)開始改變時候回調(diào)。圖3.17 重寫頁面滑動回調(diào)方法如圖3.17,在設(shè)置好新聞菜單詳情頁面后,我們需要通過該數(shù)據(jù)列表的具體條目的點(diǎn)擊,跳轉(zhuǎn)到一個能顯示W(wǎng)ebView控件頁面,將新聞詳情展示出來。以下代碼實(shí)現(xiàn)這個功能。圖3.18 配置新聞數(shù)據(jù)點(diǎn)擊事件上述代碼如圖3.18中的第一個代碼塊將通過計算獲取當(dāng)前點(diǎn)擊的元素在數(shù)據(jù)列表(新聞菜單詳情數(shù)據(jù)列表,下縮寫為數(shù)據(jù)列表)中的位置記為局部變量position,第二個代碼塊將通過自定義工具包PrefUtils的setString()函數(shù)將點(diǎn)擊的新聞的分類種類存入sharedPreference中做偏好種類緩存,在主頁面的第四個功能頁面使用到這個參數(shù)(通過偏好緩存種類做精選推薦),第三個代碼塊將通過前面position獲取位置,將已點(diǎn)擊的數(shù)據(jù)列表視圖中的文字置于“灰色”,即視作“已點(diǎn)擊過”,第四個代碼塊通過Intent類的putExtra()方法實(shí)現(xiàn)數(shù)據(jù)傳輸和上下文Context類的startActivity()方法實(shí)現(xiàn)頁面跳轉(zhuǎn),至此頁面將會跳轉(zhuǎn)到NewsDetailActivity類中,繼續(xù)實(shí)現(xiàn)新聞詳情頁面的事件功能和邏輯。3.6評論功能的具體實(shí)現(xiàn)方法上面3.4中已經(jīng)描述了到新聞詳情頁面邏輯代碼NewsDetailActivity類的跳轉(zhuǎn),本小節(jié)將描述如何實(shí)現(xiàn)評論功能,為了達(dá)到這個目的,我需要先對繼承于AppComPatActivity類并實(shí)現(xiàn)視圖點(diǎn)擊事件監(jiān)聽器接口的NewsDetailActivity類和相關(guān)的布局文件做出必要的闡述。 NewsDetailActivity類中的視圖創(chuàng)建方法onCreate()的代碼如下(代碼中已經(jīng)省略掉大部分的變量定義以節(jié)省篇幅),新聞詳情頁面的實(shí)現(xiàn)包含以下邏輯:重寫onPageStarted()方法,在視圖打開時調(diào)用,將ProgressBar類的pbLoading對象設(shè)置可見。重寫onPageFinished()方法,在視圖加載完成時候,調(diào)用父類的視圖加載方法(實(shí)際上是空操作),并將pbLoading設(shè)置不可見。重寫shouldOverrideUrlLoading()方法,利用子控件view的loadUrl()方法裝載intent傳入的數(shù)據(jù)包中的加載網(wǎng)址url,實(shí)現(xiàn)頁面加載。重寫onReceiveSslError()方法,接受安全鏈接網(wǎng)站的所有證書。使用WebView中的setWebChromeClient()方法,分別實(shí)現(xiàn)進(jìn)度條變化,接受網(wǎng)頁標(biāo)題的功能。(a)節(jié)選1(b)節(jié)選2圖3.19 新聞詳情頁面邏輯上圖3.19為新聞詳情頁面邏輯代碼塊。到這里新聞詳情的頁面加載基本完成了,但是布局的下端按鈕“查看評論”和“評論”以及頁面其他按鈕,仍然缺少邏輯,只是個空按鈕。因此在下面的代碼中將描述如何實(shí)現(xiàn)兩個按鈕的點(diǎn)擊事件邏輯:(a)節(jié)選1(b)節(jié)選2圖3.20 新聞詳情頁面按鈕邏輯如圖3.20所示,這一整個代碼塊使用switch語句的選擇結(jié)構(gòu),將各個按鈕的點(diǎn)擊轉(zhuǎn)化為各個case分支入口,結(jié)構(gòu)和形式簡潔明了。其中:caseR.id.btn_back,代表點(diǎn)擊了左上返回按鈕,調(diào)用活動的finish方法結(jié)束當(dāng)前新聞詳情頁面的java代碼返回新聞菜單詳情頁面。caseR.id.textsize,代表點(diǎn)擊了右上方字體大小選擇按鈕,將通過showChooseDialog()方法彈出對話框并實(shí)現(xiàn)調(diào)整webview的字體大小的邏輯功能。caseR.id.share,代表點(diǎn)擊了分享按鈕,調(diào)用showShare()方法實(shí)現(xiàn)網(wǎng)址鏈接分享的邏輯。caseR.id.am_tv_comment,代表點(diǎn)擊了點(diǎn)擊“評論”按鈕,通過comment()方法處理評論邏輯,下面將會詳細(xì)介紹。caseR.id.am_tv_zan,代表點(diǎn)擊了“查看評論”按鈕,進(jìn)入查看評論的新頁面,顯示數(shù)據(jù)庫內(nèi)容。caseR.id.am_b_save,點(diǎn)擊評論之后將會彈出一個含編輯框和保存按鈕的評論功能布局框,這個case用于實(shí)現(xiàn)這個功能布局框的評論內(nèi)容的保存數(shù)據(jù)庫操作的事件監(jiān)聽。下面是comment()方法,實(shí)現(xiàn)彈出含評論框的線性布局的邏輯圖3.20 新聞詳情頁面按鈕邏輯該代碼如圖3.20,通過布爾值控制整個線性布局的可見和不可見的邏輯,評論功能交付給saveComment()方法處理,如下是saveComment()方法:圖3.21 評論儲存的邏輯代碼上述代碼如圖3.21,通過編輯框控件EditTextView控件對象mAmEdMsg獲取文本內(nèi)容,并將該內(nèi)容轉(zhuǎn)化為統(tǒng)一資源標(biāo)識符Uri格式的內(nèi)容項的形式,傳入數(shù)據(jù)庫達(dá)到評論緩存的功能。這里注意兩個點(diǎn),其一由于不采用公網(wǎng)的數(shù)據(jù)庫服務(wù)器,我們的數(shù)據(jù)庫操作主要本地利用ContentResolver類進(jìn)行,其二通過Uri的結(jié)構(gòu)我們能夠很輕松的通過這種“協(xié)議”的方式有結(jié)構(gòu)地依據(jù)新聞條目分別存儲各自的評論內(nèi)容。在代碼最后通過ifelse語句處理編輯框控件文本為空的情況處理。下面將展示的是getCommentList()方法的詳細(xì)代碼,它用于查看評論的邏輯實(shí)現(xiàn),它同樣通過ContentResolver類和Uri類來實(shí)現(xiàn)數(shù)據(jù)庫中評論條目的讀取,不再贅述。值得注意的是它在第二個代碼塊通過Bundle的機(jī)制將數(shù)據(jù)打包并通過Intent將評論數(shù)據(jù)包傳輸?shù)健安榭丛u論”的新頁面,在另外一個java類中顯示新聞評論詳情的數(shù)據(jù):圖3.22 評論顯示邏輯代碼下面是新聞評論詳情頁面如圖3.22為CommentActivity類的實(shí)現(xiàn)(a)節(jié)選1(b)節(jié)選2(c)節(jié)選3(d)節(jié)選4(e)節(jié)選5圖3.23 評論顯示的數(shù)據(jù)處理上述代碼如圖3.23,將評論數(shù)據(jù)條目通過適配器配置到顯示列表上的方法和新聞菜單詳情的方法一模一樣。值得注意的是,對于待顯示的評論條目的屬性格式在代碼末尾新定義了一個類ViewHolder,這種做法方便于統(tǒng)一評論屬性格式,同時評論的用戶名采取“游客”的模式,定義了一個名字?jǐn)?shù)組,各評論的用戶名屬性將從中隨機(jī)挑選,方便于實(shí)現(xiàn)。到這里,整個新聞中心的客戶端邏輯和布局的實(shí)現(xiàn)已經(jīng)完成,里面包含了幾乎所有的關(guān)鍵操作,剩余頁面的實(shí)現(xiàn)形式和思路和它如出一轍,因此不再贅述。

測試與分析以下將通過圖片和文字描述簡述根據(jù)框架設(shè)計,程序運(yùn)行的總體步驟和效果:圖4.1 初始動畫效果點(diǎn)擊程序后進(jìn)入SplashActivity代碼處理應(yīng)用開始前的動畫頁,圖4.1是打開程序后動畫頁面的顯示效果。圖4.2 引導(dǎo)頁面顯示效果動畫頁面過后進(jìn)入GuideActivity代碼處理引導(dǎo)頁面,引導(dǎo)頁面通過添加三張圖片,同時根據(jù)圖片數(shù)量生成紅白圓點(diǎn),實(shí)現(xiàn)左滑右滑切換,滑到最后一頁顯示一個“開始體驗(yàn)”的按鈕,通過監(jiān)聽器實(shí)現(xiàn)下一個頁面的跳轉(zhuǎn),圖4.2中三張圖為引導(dǎo)頁面三張滑動圖片組成的頁面效果。緊接著進(jìn)入到App的主頁面,下面對主頁面上的各個子功能頁面進(jìn)行逐一介紹。首先是作為首頁的“今日星座運(yùn)勢”頁面。在此我先順帶提一提為什么要以這種功能作為主頁面,或者說它有什么存在的意義。根據(jù)美國傳播學(xué)家和政治學(xué)家拉斯韋爾所提出的著名“五W”模式,即誰,通過什么渠道,對誰說了什么,達(dá)到了什么效果,即傳播是一種目的性行為過程。依安陽工學(xué)院一篇論文《論新聞受眾的心理特點(diǎn)》所言,新聞受眾的需求總共分為三大層面:基本的生理需求,心理需求,還有自我實(shí)現(xiàn)的需求。由以上材料我們可以回答一個問題“新聞App的受眾想得到什么信息”,或者說“他們對軟件的內(nèi)容期待著什么”。新聞App在現(xiàn)代社會的意義已經(jīng)遠(yuǎn)遠(yuǎn)超過舊社會上的報紙、雜志所需求,除了是一款新聞軟件,更需要滿足人們的獵奇心理和娛樂需要。不管是傳達(dá)新聞信息的內(nèi)容,還是構(gòu)造一個具有交友溝通功能的評論社區(qū)系統(tǒng),例如“虎撲”,又或者是“騰訊新聞”的“日行一善”的募捐板塊,它們都實(shí)現(xiàn)了服務(wù)端和客戶端之間的溝通,通過軟件和頁面的形式交互,雙向傳達(dá)著時刻更新的信息,實(shí)現(xiàn)了客戶的需求,這樣來看,這些在純粹的傳統(tǒng)意義上的新聞之外的功能模塊,很好地充實(shí)了軟件內(nèi)容,錦上添花,同時還能賦予軟件獨(dú)特的標(biāo)簽(例如虎撲標(biāo)榜為籃球社區(qū),小紅書APP以彩妝、護(hù)理品信息為主要業(yè)務(wù)依托給客戶種草),因此本軟件內(nèi)置“每日星座運(yùn)勢”、“圖靈機(jī)器人聊天”、“精選新聞推薦”也是如此,既能夠向客戶傳達(dá)實(shí)時更新的能夠滿足客戶需求的信息,又為軟件本身創(chuàng)造不同的特色標(biāo)簽,這就是它們所存在的意義。圖4.3 星座運(yùn)勢界面運(yùn)行效果上圖4.3是每日星座運(yùn)勢的顯示效果,上方背景設(shè)置一張十二星座的圓盤圖標(biāo),每個圖標(biāo)上設(shè)置透明的監(jiān)聽器實(shí)現(xiàn)點(diǎn)擊事件,進(jìn)入上方右圖的今日星座運(yùn)勢詳情。節(jié)選1節(jié)選2節(jié)選3節(jié)選4圖4.4 新聞中心和評論系統(tǒng)運(yùn)行效果上圖4.4中四個界面為軟件關(guān)鍵頁面“新聞中心”的展示,新聞菜單詳情頁面內(nèi)含各個新聞種類標(biāo)簽的標(biāo)簽條,中間為新聞菜單詳情頁面的信息列表可以實(shí)現(xiàn)上拉刷新和下拉拓展的效果。新聞詳情頁面將打開一個web頁面填入框架中,在最下方有“查看評論”和“評論”的按鈕,點(diǎn)擊評論按鈕能夠彈出一個編輯框?qū)崿F(xiàn)評論輸入和存入數(shù)據(jù)庫的功能,點(diǎn)擊查看評論按鈕將會跳轉(zhuǎn)到一個新頁面,以列表的方式展示數(shù)據(jù)庫的相關(guān)評論內(nèi)容。圖4.5 聊天機(jī)器人運(yùn)行效果上圖4.5是對圖靈機(jī)器人的訪問,實(shí)現(xiàn)智能聊天的功能。圖4.6 新聞精選頁面運(yùn)行效果上圖4.6是推薦精選,其內(nèi)容根據(jù)在新聞中心的點(diǎn)擊情況而定,根據(jù)新聞中心最后點(diǎn)擊的新聞種類,進(jìn)行隨機(jī)推薦新聞內(nèi)容。圖4.6 設(shè)置頁面顯示效果最后一個頁面是設(shè)置頁面如圖4.6所示,在這里可以進(jìn)行用戶自定義的偏好功能拓展,由于本軟件只作畢業(yè)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論