基于android平臺(tái)的電子閱讀器_第1頁(yè)
基于android平臺(tái)的電子閱讀器_第2頁(yè)
基于android平臺(tái)的電子閱讀器_第3頁(yè)
基于android平臺(tái)的電子閱讀器_第4頁(yè)
基于android平臺(tái)的電子閱讀器_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、吉林大學(xué)珠海學(xué)院畢業(yè)論文(設(shè)計(jì))基于android平臺(tái)的電子閱讀器the mobile phone e-book reader based on android platform完成日期 2013年4月19日吉林大學(xué)珠海學(xué)院本科畢業(yè)論文(設(shè)計(jì))開(kāi)題報(bào)告摘要android作為一大手機(jī)主流平臺(tái),憑其優(yōu)越的性能和豐富的功能,為許多用戶(hù)所喜愛(ài)。擁有一部android智能手機(jī),讓人們的生活無(wú)限便捷,android應(yīng)用市場(chǎng)上所提供的各種豐富應(yīng)用,幾乎可以滿(mǎn)足人們生活中的各種需求?,F(xiàn)在許多人喜歡通過(guò)手機(jī)看新聞、看小說(shuō)、看雜志,手機(jī)作為第一大移動(dòng)客戶(hù)端,更是能夠滿(mǎn)足人們隨時(shí)隨地獲取資訊的愿望。由此可見(jiàn),一款好

2、的手機(jī)閱讀器開(kāi)發(fā)是志在必行的。本次設(shè)計(jì)為滿(mǎn)足用戶(hù)對(duì)良好閱讀體驗(yàn)的需求,采用sqlite輕量級(jí)數(shù)據(jù)庫(kù)技術(shù)和java編程語(yǔ)言,在android sdk、eclipse及android專(zhuān)門(mén)為eclipse開(kāi)發(fā)的插件adt搭建的開(kāi)發(fā)環(huán)境下,開(kāi)發(fā)了這款功能豐富的電子閱讀器。除了最基本的閱讀功能,還有書(shū)架、找書(shū)、書(shū)簽、模擬翻頁(yè)效果以及閱讀界面設(shè)置的操作,并且在真機(jī)上對(duì)其進(jìn)行了測(cè)試與驗(yàn)證,基本上達(dá)到了用戶(hù)的需求標(biāo)準(zhǔn)。關(guān)鍵字: android;閱讀器;數(shù)據(jù)庫(kù);音樂(lè)播放器;翻頁(yè)abstractserves as a mainstream mobile phone system platform,android

3、is popular with manyusers because of its superior performance and richfunctionalities. owning an android mobile phone can make peoples life more convenient. the variety of wonderful software applications provided by android application store can almost meet peoples daily needs indifferent aspects.no

4、wadays,many people like to read news、novels or magazines on the mobile phone.beside,mobile phone serves as the biggest mobile client is able to meet peoples aspiration of acquiring information anytime and anywhere. therefore,a good design of mobile phone e-book reader is necessary.in order to bring

5、to users a good experience of reading,this design uses sqlite lightweight database technology and the java programming language. and it is finished under the development environment which consists of android sdk、eclipse and adt. in addition to the basic reading functionality,the e-book reader also p

6、rovides bookshelf、bookmark、setting of reading page and some other functionalities. all the functionalities had beentested to work normally on mobile phone and basically reach the standard of peoples needs .key words:android;reader;database;music player;page turning目錄1 前言11.1 課題提出的背景目的及意義11.1.1 課題提出的

7、背景11.1.2 課題提出的目的11.1.3 課題提出的意義11.2 設(shè)計(jì)思路及研究方法21.2.1 設(shè)計(jì)思路21.2.2 研究方法22 需求分析42.1 軟件的基本功能42.2系統(tǒng)功能分析圖52.3 開(kāi)發(fā)環(huán)境53 總體設(shè)計(jì)63.1 總體軟件結(jié)構(gòu)設(shè)計(jì)63.2 系統(tǒng)結(jié)構(gòu)圖73.3 數(shù)據(jù)庫(kù)設(shè)計(jì)83.3.1 數(shù)據(jù)模式e-r圖83.3.2 數(shù)據(jù)表設(shè)計(jì)93.3.3 表的具體設(shè)計(jì)93.3.4 數(shù)據(jù)字典104 系統(tǒng)功能模塊的設(shè)計(jì)與實(shí)現(xiàn)124.1關(guān)鍵技術(shù)124.1.1 android平臺(tái)及java語(yǔ)言124.1.2 sqlite3 數(shù)據(jù)庫(kù)124.2 數(shù)據(jù)庫(kù)實(shí)現(xiàn)類(lèi)及數(shù)據(jù)庫(kù)工具類(lèi)134.2.1 數(shù)據(jù)庫(kù)實(shí)現(xiàn)類(lèi)dbh

8、elper134.2.2 數(shù)據(jù)庫(kù)操作工具類(lèi)dbutil134.3 書(shū)架繪制類(lèi)bookshelfgridview154.4 書(shū)架類(lèi)bookshelfactivity164.5 找圖書(shū)的實(shí)現(xiàn)類(lèi)findfilesactivity184.6 后臺(tái)閱讀主控制類(lèi)bookpagefactory184.7 前臺(tái)閱讀顯示界面mainactivity204.7.1 閱讀界面上的文字顯示控制204.7.2 用戶(hù)書(shū)簽功能214.7.3 背景設(shè)置功能214.7.4 背景音樂(lè)設(shè)置功能214.7.5 字體設(shè)置功能214.7.6 設(shè)置閱讀進(jìn)度功能225 系統(tǒng)測(cè)試235.1 我的書(shū)架235.2 用戶(hù)閱讀界面246 總結(jié)30參考

9、文獻(xiàn)31附錄一核心代碼321.書(shū)架界面代碼322.小說(shuō)編碼自動(dòng)識(shí)別核心代碼333.顯示界面核心代碼354.小說(shuō)內(nèi)容讀取核心代碼39致謝401 前言1.1 課題提出的背景目的及意義1.1.1 課題提出的背景信息化的今天,手機(jī)已經(jīng)成為生活中不可或缺的通訊設(shè)備。同時(shí),科技的發(fā)展使得手機(jī)越發(fā)精致且智能,在這樣的背景下,針對(duì)android智能手機(jī)所開(kāi)發(fā)出來(lái)的各種應(yīng)用軟件層出不窮,將我們的生活打造的多姿多彩。現(xiàn)在,手機(jī)已不僅僅是簡(jiǎn)單的通訊工具,也是我們?nèi)粘I钪胁豢扇鄙俚墨@得信息的渠道,在很大程度上滿(mǎn)足了我們快捷便利獲取最新信息的需求。一個(gè)好的手機(jī)軟件,能夠豐富用戶(hù)的生活,滿(mǎn)足用戶(hù)的需要。因此,開(kāi)發(fā)一款好

10、的手機(jī)軟件是相當(dāng)有需求和市場(chǎng)的。而手機(jī)閱讀軟件可以為人們提供方便快捷的閱讀平臺(tái),滿(mǎn)足人們隨時(shí)隨地閱讀各種資料的需求。1.1.2 課題提出的目的此次設(shè)計(jì)的目的在于,方便閱讀者閱讀的同時(shí),帶給閱讀者良好的閱讀體驗(yàn)。閱讀者不用再隨身攜帶厚重的書(shū)籍,這樣能夠大大減少了讀者的負(fù)擔(dān),讀者只需要事先下載好一本txt格式的電子書(shū),或者在閱讀器中在線下載,并存放在手機(jī)sd卡里邊,就可以隨時(shí)隨地進(jìn)行閱讀。另外在閱讀器的基礎(chǔ)上,添加背景音樂(lè)功能,讓讀者在看書(shū)的同時(shí),還能享受音樂(lè)的美妙,增強(qiáng)用戶(hù)體驗(yàn)。1.1.3 課題提出的意義這個(gè)時(shí)代是個(gè)無(wú)紙化電子閱讀1時(shí)代,相對(duì)于電視報(bào)紙雜志這些傳統(tǒng)的信息傳遞媒介,互聯(lián)網(wǎng)創(chuàng)造著全新

11、的生活空間,所能提供的信息量更大、更快捷,加上近幾年手機(jī)等移動(dòng)設(shè)備的快速發(fā)展,通過(guò)移動(dòng)互聯(lián)網(wǎng)獲取資訊的方式更加符合人們隨時(shí)隨地獲取信息的需求,電子閱讀器也就應(yīng)運(yùn)而生,逐漸普及。雖然,android市場(chǎng)上電子閱讀類(lèi)的應(yīng)用各式各樣,但是大多功能較少且簡(jiǎn)單,用戶(hù)體驗(yàn)較差,不能滿(mǎn)足人們的需求。于是,廣大手機(jī)讀者追求一個(gè)功能全面的電子書(shū)閱讀器。本軟件是基于android系統(tǒng)開(kāi)發(fā)的一款電子閱讀器軟件,給用戶(hù)提供舒適的界面和良好的閱讀體驗(yàn)是本軟件的出發(fā)點(diǎn)。所以除了提供一個(gè)主界面以供閱讀,還提供了虛擬書(shū)架和背景音樂(lè),讓用戶(hù)有一種回歸書(shū)房并在書(shū)房里邊看書(shū)邊享受音樂(lè)的感覺(jué)。另外,用戶(hù)還能設(shè)置閱讀界面的背景,調(diào)節(jié)字

12、體大小與選擇進(jìn)度,還能保存書(shū)簽以供下次繼續(xù)閱讀。在閱讀過(guò)程中,用戶(hù)只要手指輕輕一劃就能體驗(yàn)到翻書(shū)的效果,這也是閱讀器的一大亮點(diǎn)。1.2 設(shè)計(jì)思路及研究方法1.2.1 設(shè)計(jì)思路這款閱讀器的設(shè)計(jì)主要遵從需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試與維護(hù)等一般軟件工程開(kāi)發(fā)過(guò)程中的幾個(gè)基本流程2。需求分析階段,首先根據(jù)需求整體分析閱讀器的主要功能;概要設(shè)計(jì)階段,根據(jù)閱讀器的組織結(jié)構(gòu)把這些功能模塊化,根據(jù)模塊之間的聯(lián)系設(shè)計(jì)業(yè)務(wù)流程;詳細(xì)設(shè)計(jì)階段,對(duì)每個(gè)模塊進(jìn)行詳細(xì)的設(shè)計(jì),這個(gè)階段應(yīng)當(dāng)保證軟件的需求完全分配給整個(gè)軟件;編碼階段,分別對(duì)每個(gè)模塊進(jìn)行調(diào)試,利用之前編碼完成的該模塊的樁模塊或驅(qū)動(dòng)模塊對(duì)其進(jìn)行數(shù)據(jù)調(diào)試

13、;測(cè)試階段,最后對(duì)各個(gè)模塊進(jìn)行系統(tǒng)集成測(cè)試。在以上陳述中,所謂驅(qū)動(dòng)模塊3,是指被調(diào)試模塊的上一級(jí)模塊,也就是調(diào)用調(diào)試模塊并向其傳入數(shù)據(jù)的模塊,驅(qū)動(dòng)模塊負(fù)責(zé)傳數(shù)據(jù),而具體操作由被調(diào)試的模塊負(fù)責(zé)執(zhí)行5;所謂樁模塊3,是指被調(diào)試的模塊所調(diào)用的模塊,樁模塊負(fù)責(zé)接收被調(diào)試模塊傳遞的數(shù)據(jù),并根據(jù)數(shù)據(jù)執(zhí)行相應(yīng)操作6。通過(guò)調(diào)查,發(fā)現(xiàn)智能手機(jī)的用戶(hù)基本都用手機(jī)來(lái)閱讀書(shū)籍資料,但各色閱讀軟件都存在各種不足,差強(qiáng)人意。本系統(tǒng)針對(duì)用戶(hù)需求進(jìn)行了仔細(xì)的分析,最后實(shí)現(xiàn)了軟件的開(kāi)發(fā)。1.2.2 研究方法閱讀器在整體框架研究上采用觀察研究法,在總體設(shè)計(jì)上采用結(jié)構(gòu)化方法,在具體開(kāi)發(fā)上采用快速原型法。觀察研究法指根據(jù)既定的研究目

14、的,對(duì)現(xiàn)象或行為做有計(jì)劃與有系統(tǒng)的觀察,并依觀察的記錄對(duì)現(xiàn)象或行為做客觀性的描述和解釋。結(jié)構(gòu)化方法4是在結(jié)構(gòu)化程序設(shè)計(jì)思想基礎(chǔ)上發(fā)展起來(lái)的,由結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化程序設(shè)計(jì)三部分有機(jī)組合而成的。結(jié)構(gòu)化方法的基本思想:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,而且這種分解是自頂向下,逐層分解,使得每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)??焖僭头?就是在系統(tǒng)開(kāi)發(fā)之初,盡快給用戶(hù)構(gòu)造一個(gè)新系統(tǒng)的模型(原型),反復(fù)演示原型并征求用戶(hù)意見(jiàn),開(kāi)發(fā)人員根據(jù)用戶(hù)意見(jiàn)不斷修改完善原型,直到基本滿(mǎn)足用戶(hù)的要求再進(jìn)而實(shí)現(xiàn)系統(tǒng),這種軟件開(kāi)發(fā)方法就是快速原型法。2 需求分析2.1 軟件的基本功能需求分

15、析是必不可少的步驟,也是軟件設(shè)計(jì)成功的基礎(chǔ)。在經(jīng)過(guò)觀察研究和需求分析,結(jié)合分析結(jié)果和業(yè)務(wù)流程,對(duì)軟件的功能和設(shè)計(jì)提出了具體的要求?;旧洗_定閱讀器的功能模塊如下:1.目錄頁(yè)面:瀏覽和查找文件功能(1)瀏覽和查找文件:可以瀏覽sd卡中的文件,包括文本文件和音樂(lè)文件,并對(duì)文件進(jìn)行操作,如把文本圖書(shū)添加到書(shū)架上或播放音樂(lè)文件。2.書(shū)架界面:包含書(shū)架頁(yè)面,添加圖書(shū),刪除圖書(shū),打開(kāi)圖書(shū),關(guān)于等功能(1)書(shū)架頁(yè)面:閱讀器的首頁(yè),首次使用閱讀器需要從sd卡中往書(shū)架上添加圖書(shū),添加成功后,圖書(shū)會(huì)出現(xiàn)在書(shū)架上。非首次使用,進(jìn)入閱讀器后,可直接對(duì)之前已添加在書(shū)架上的圖書(shū)進(jìn)行操作。(2)添加圖書(shū):通過(guò)書(shū)架頁(yè)面men

16、u菜單的添加本地圖書(shū)或書(shū)架上的點(diǎn)擊添加圖書(shū)打開(kāi)sd卡目錄,并導(dǎo)入sd卡中的圖書(shū)。(3)刪除圖書(shū):點(diǎn)擊書(shū)架上的圖書(shū),會(huì)出現(xiàn)操作提示框詢(xún)問(wèn)是打開(kāi)圖書(shū)或者刪除圖書(shū),點(diǎn)擊刪除圖書(shū)可從書(shū)架上移除圖書(shū)。(4)打開(kāi)圖書(shū):點(diǎn)擊書(shū)架上的圖書(shū),會(huì)出現(xiàn)操作提示框詢(xún)問(wèn)是打開(kāi)圖書(shū)或者刪除圖書(shū),點(diǎn)擊打開(kāi)圖書(shū)直接進(jìn)入閱讀界面。(5)關(guān)于:主要是關(guān)于本設(shè)計(jì)的版本,版權(quán)問(wèn)題。3.閱讀界面:閱讀頁(yè)面,添加書(shū)簽,刪除書(shū)簽,打開(kāi)書(shū)簽,背景設(shè)置,背景音樂(lè),字體設(shè)置,閱讀進(jìn)度,滑動(dòng)翻頁(yè),返回書(shū)架等功能(1)閱讀頁(yè)面:用來(lái)閱讀文檔的主界面,是整個(gè)閱讀器設(shè)計(jì)核心部分。(2)書(shū)簽:可對(duì)當(dāng)前閱讀進(jìn)度進(jìn)行保存以方便下次閱讀,默認(rèn)以當(dāng)前頁(yè)第一行字作

17、為備注,這樣方便用戶(hù)識(shí)別自己想要閱讀的進(jìn)度。點(diǎn)擊書(shū)簽列表中的書(shū)簽可對(duì)書(shū)簽進(jìn)行打開(kāi)或者刪除操作。(3)背景設(shè)置:提供了六種舒適的背景圖作為閱讀背景的選擇,不同的閱讀界面風(fēng)格使閱讀更為個(gè)性化。(4)背景音樂(lè):做成播放器的樣式,方便用戶(hù)進(jìn)行操作。用戶(hù)可從sd卡中讀取自己喜歡的歌曲作為背景音樂(lè),在閱讀的同時(shí)欣賞音樂(lè),提升視聽(tīng)體驗(yàn)。(5)字體設(shè)置:拖動(dòng)調(diào)節(jié)條可調(diào)節(jié)字體的大小。(6)閱讀進(jìn)度:拖動(dòng)進(jìn)度條可調(diào)節(jié)閱讀進(jìn)度。(7)滑動(dòng)翻頁(yè):手指在屏幕上滑動(dòng)會(huì)翻書(shū)的效果,向左滑則為向后翻頁(yè),向右滑則為向前翻頁(yè)。(8)返回書(shū)架:退出閱讀頁(yè)面,重新進(jìn)入書(shū)架頁(yè)面進(jìn)行操作。2.2系統(tǒng)功能分析圖本設(shè)計(jì)總體邏輯結(jié)構(gòu)層次劃分如

18、圖2-1所示。閱讀器文件目錄頁(yè)面書(shū)架頁(yè)面閱讀頁(yè)面查找文件添加圖書(shū)打開(kāi)圖書(shū)刪除圖書(shū)關(guān)于背景圖片閱讀進(jìn)度背景音樂(lè)字體設(shè)置書(shū)簽滑動(dòng)翻頁(yè)返回書(shū)架圖2-1 系統(tǒng)功能分析圖2.3 開(kāi)發(fā)環(huán)境本軟件的開(kāi)發(fā)是在windows操作系統(tǒng)下,使用android sdk、eclipse及android專(zhuān)門(mén)為eclipse開(kāi)發(fā)的插件adt搭建的開(kāi)發(fā)環(huán)境。本軟件所涉及到的數(shù)據(jù)存儲(chǔ)的主要是用戶(hù)對(duì)文本閱讀文件的閱讀進(jìn)度及文本信息的記錄,數(shù)據(jù)量比較少,使用android系統(tǒng)自帶的sqlite輕量級(jí)數(shù)據(jù)庫(kù)就可以很好的保證這些數(shù)據(jù)的存儲(chǔ)。因此,數(shù)據(jù)庫(kù)直接使用sqlite數(shù)據(jù)庫(kù)。3 總體設(shè)計(jì)3.1 總體軟件結(jié)構(gòu)設(shè)計(jì)打開(kāi)閱讀器之后,首先

19、會(huì)顯示書(shū)架界面,書(shū)架上會(huì)以書(shū)本的形式,顯示用戶(hù)之前添加到書(shū)架上的圖書(shū)。如果沒(méi)有添加過(guò)圖書(shū),用戶(hù)可以通過(guò)點(diǎn)擊書(shū)架上的“添加圖書(shū)”進(jìn)入sd卡,添加txt格式的小說(shuō)文本到書(shū)架上;通過(guò)點(diǎn)擊書(shū)架上的圖書(shū),進(jìn)入到閱讀主界面。從書(shū)架上點(diǎn)擊圖書(shū)進(jìn)入閱讀主界面時(shí),會(huì)根據(jù)程序自動(dòng)保存的系統(tǒng)書(shū)簽表中記錄的該圖書(shū)的信息,自動(dòng)打開(kāi)顯示定位到上一次的閱讀位置,如果之前沒(méi)打開(kāi)過(guò),則直接從首頁(yè)開(kāi)始顯示。在閱讀界面,用戶(hù)可以通過(guò)手機(jī)上的menu鍵,調(diào)出功能操作菜單,菜單中用戶(hù)可以根據(jù)操作需要執(zhí)行:用戶(hù)書(shū)簽的添加、刪除、打開(kāi)指定書(shū)簽的操作;閱讀界面的背景設(shè)置;閱讀時(shí)的背景音樂(lè)設(shè)置;字體大小的設(shè)置;閱讀進(jìn)度的拖動(dòng)定位操作;返回書(shū)架

20、操作;根據(jù)各個(gè)模塊的不同功能,對(duì)本設(shè)計(jì)進(jìn)行了層次結(jié)構(gòu)的劃分。在eclipse下創(chuàng)建了一個(gè)名為txtreader的工程,工程的結(jié)構(gòu)圖如圖3-1:圖3-1 軟件工程結(jié)構(gòu)圖主要包括以下內(nèi)容:(1)src源代碼目錄:此目錄存放android應(yīng)用程序所有的源代碼。開(kāi)發(fā)過(guò)程中的主要的代碼編寫(xiě)都是在該目錄下的不同功能類(lèi)中編寫(xiě)完成。(2)gen文件夾目錄:此目錄用于存放adt插件根據(jù)應(yīng)用中的資源文件自動(dòng)生成的r.java清單,r.java中包含了應(yīng)用中的用戶(hù)界面、圖像、字符串等各種資源與之相對(duì)應(yīng)的資源編號(hào)id。在編寫(xiě)代碼中,要使用資源文件時(shí),可以十分方便的直接通過(guò)此清單中對(duì)應(yīng)的資源id來(lái)調(diào)用。(3)res資源

21、目錄:該目錄用于存放整個(gè)工程用所用到的全部的資源,包括圖片資源、顯示界面布局文件、字符串資源、顏色資源、尺寸資源、樣式資源等等。在此目錄下,其中通常默認(rèn)在工程創(chuàng)建時(shí)自動(dòng)生成的常用目錄有drawable、layout和values這 3個(gè)目錄。這三個(gè)目錄分別代表不同的資源類(lèi)型。其中:drawable目錄:用于保存應(yīng)用的圖片資源,此目錄下又可細(xì)分為drawable-hdpi,drawable-ldpi,drawable-mdpi3個(gè)文件目錄,用于根據(jù)要顯示的屏幕分辨率的不同,對(duì)同一個(gè)要顯示的圖片保存不同分辨率的圖片資源,這樣,程序運(yùn)行時(shí),可以根據(jù)屏幕分辨率自動(dòng)從對(duì)應(yīng)的drawable選擇最合適該分

22、辨率下顯示的圖片資源。layout目錄:該目錄用于存放使用xml格式表示的界面布局文件。一般android 推薦使用xml布局文件來(lái)控制視圖,這樣可以將程序的視圖顯示控制邏輯從java代碼中分離出來(lái),在xml文件中進(jìn)行界面布局,更好的體現(xiàn)mvc的原則。values目錄:該目錄也是包含了用xml格式的資源文件,這里主要保存一些額外的資源,如字符串、顏色、樣式和數(shù)組等。在代碼中使用時(shí),直接通過(guò)r類(lèi)來(lái)調(diào)用它們,如果不直接使用,可將代碼和資源分開(kāi)管理,便于維護(hù)。除了這些主要的文件目錄外,工程下還包含一個(gè)androidmanifest.xml清單文件,這個(gè)文件是整個(gè)android程序的全局描述文件。an

23、droidmanifest.xml清單文件用于說(shuō)明該程序的名稱(chēng)、程序圖標(biāo)、程序的版本及支持的運(yùn)行環(huán)境描述、程序的各個(gè)組件的組成、可能用到的庫(kù)文件及程序可能用于的權(quán)限說(shuō)明等。3.2 系統(tǒng)結(jié)構(gòu)圖電子閱讀器系統(tǒng)結(jié)構(gòu)圖如圖3-2:閱讀器書(shū)架打開(kāi)圖書(shū)添加圖書(shū)刪除圖書(shū)關(guān)于閱讀界面背景設(shè)置背景音樂(lè)書(shū)簽滑動(dòng)翻頁(yè)閱讀進(jìn)度字體設(shè)置返回書(shū)架打開(kāi)書(shū)簽刪除書(shū)簽添加書(shū)簽打開(kāi)音樂(lè)文本文件音樂(lè)文件目錄頁(yè)面圖3-2 系統(tǒng)結(jié)構(gòu)圖3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)3.3.1 數(shù)據(jù)模式e-r圖建立系統(tǒng)數(shù)據(jù)模型的主要工具是實(shí)體關(guān)聯(lián)圖,即e-r圖。e-r圖7是表示概念模型的一種方式,用矩形表示實(shí)體型,矩形框內(nèi)寫(xiě)明實(shí)體名;用橢圓表示實(shí)體的屬性,并用無(wú)向邊

24、將其與相應(yīng)的實(shí)體型連接起來(lái);用菱形表示實(shí)體型之間的聯(lián)系,在菱形框內(nèi)寫(xiě)明聯(lián)系名,并用無(wú)向邊分別與有關(guān)實(shí)體型連接起來(lái)。e-r圖的圖形符號(hào)約定如圖3-3:圖3-3 e-r圖圖形符號(hào)用戶(hù)書(shū)簽書(shū)簽備注小說(shuō)文本路徑書(shū)簽頁(yè)首字符字節(jié)位置書(shū)簽id文本編碼小說(shuō)文本字節(jié)長(zhǎng)度圖3-4 用戶(hù)書(shū)簽記錄的e-r圖用戶(hù)書(shū)簽小說(shuō)文本路徑書(shū)簽頁(yè)首字符字節(jié)位置書(shū)簽id文本編碼小說(shuō)文本字節(jié)長(zhǎng)度圖3-5 系統(tǒng)書(shū)簽的e-r圖3.3.2 數(shù)據(jù)表設(shè)計(jì)一共設(shè)計(jì)了2張表,分別是:(1)用戶(hù)書(shū)簽表user_mark(用戶(hù)書(shū)簽的id,小說(shuō)文件的路徑,文件的字節(jié)長(zhǎng)度,書(shū)簽備注,小說(shuō)文本的編碼,當(dāng)前頁(yè)首字符在文本中的字節(jié)位置)(2)系統(tǒng)書(shū)簽表sys_

25、mark(系統(tǒng)書(shū)簽的id,小說(shuō)文件的路徑,文件的字節(jié)長(zhǎng)度,小說(shuō)文本的編碼,上次閱讀頁(yè)字節(jié)起始位置)3.3.3 表的具體設(shè)計(jì)表名:user_mark表字段:_id,filepath,filelength,remark,charset_name,bytebegin說(shuō)明:用于存儲(chǔ)用戶(hù)自己添加的書(shū)簽信息,其中:_id為自增長(zhǎng)的主鍵。filepath為小說(shuō)文本的路徑。filelength為小說(shuō)文本的字節(jié)長(zhǎng)度(用于結(jié)合filepath唯一確定某小說(shuō)文本以防有同名同路徑的文本的存在:如用戶(hù)刪除一文本后,可能會(huì)添加另一個(gè)同名文本,此時(shí)雖然路徑和文件名都一樣,但內(nèi)容不一樣)。remark為用戶(hù)添加書(shū)簽時(shí)的備注信

26、息。charset_name為文本的字節(jié)編碼(下次再打開(kāi)時(shí)不用再判斷其編碼)。bytebegin為屏幕上的文本首字符在文本中的字節(jié)位置(添加書(shū)簽時(shí),保存當(dāng)時(shí)顯示在屏幕上的文本首字符在整個(gè)文本文件中所在的字節(jié)位置,下次打開(kāi)可以從該位置直接讀取)。表名:sys_mark表字段:_id, filepath, filelength, charset_name,bytebegin說(shuō)明:用于程序在用戶(hù)退出當(dāng)前閱讀文本時(shí),自動(dòng)記錄當(dāng)前的閱讀的信息,以便下次再打開(kāi)此小說(shuō)文本時(shí),自動(dòng)定位到最近一次關(guān)閉時(shí)的閱讀位置。其中:_id為自增長(zhǎng)的主鍵。filepath為小說(shuō)文本的路徑。filelength為小說(shuō)文本的字節(jié)

27、長(zhǎng)度(用于結(jié)合filepath唯一確定某小說(shuō)文本以防有同名同路徑的文本的存在)。charset_name為文本的字節(jié)編碼(下次再打開(kāi)時(shí)不用再判斷其編碼)。bytebegin為屏幕上的文本首字符在文本中的字節(jié)位置(下次打開(kāi)可以從該位置直接讀取)。3.3.4 數(shù)據(jù)字典數(shù)據(jù)字典11是物理數(shù)據(jù)庫(kù)的具體體現(xiàn), 是關(guān)于數(shù)據(jù)的信息的集合,也就是對(duì)所有數(shù)據(jù)元素的定義的集合,是一組表和視圖結(jié)構(gòu)。數(shù)據(jù)庫(kù)用的android系統(tǒng)自帶的輕量級(jí)數(shù)據(jù)庫(kù)sqlite3,創(chuàng)建了user_mark,sys_mark兩個(gè)表,分別用于記錄用戶(hù)設(shè)置的書(shū)簽信息和退出閱讀界面時(shí),程序自動(dòng)記錄當(dāng)前閱讀信息。具體內(nèi)容如表3-1、表3-2:表3

28、-1 用戶(hù)簽表user_mark表3-2 系統(tǒng)書(shū)簽表4 系統(tǒng)功能模塊的設(shè)計(jì)與實(shí)現(xiàn)4.1關(guān)鍵技術(shù)4.1.1 android平臺(tái)及java語(yǔ)言以下圖表展示了android操作系統(tǒng)的主要組成部分:圖4-1 android系統(tǒng)架構(gòu)圖從圖示上,可以發(fā)現(xiàn),android系統(tǒng)底層內(nèi)核是以linux系統(tǒng)為基礎(chǔ)的,由底層操作系統(tǒng)、中間件、應(yīng)用程序框架和上層應(yīng)用程序?qū)铀膫€(gè)部分組成,層與層之間相互分離,各層分工明確、層與層之間低耦合8。大部分的android程序可以在上層應(yīng)用程序?qū)油ㄟ^(guò)java或者其他編碼言語(yǔ)實(shí)現(xiàn)。而電子閱讀器正是主要在這層使用java語(yǔ)言為基礎(chǔ)編碼實(shí)現(xiàn)的。4.1.2 sqlite3 數(shù)據(jù)庫(kù)andr

29、oid系統(tǒng)集成了輕量級(jí)的sqlite9數(shù)據(jù)庫(kù),sqlite適用于資源有限的設(shè)備,具有如下特征:輕量級(jí)數(shù)據(jù)庫(kù),功能簡(jiǎn)單且尺寸小。不依賴(lài)第三軟件,與底層操作系統(tǒng)無(wú)關(guān),核心引擎不需要安裝,幾乎能在所有的操作系統(tǒng)上運(yùn)行,具有很高的獨(dú)立性。方便管理與維護(hù),一個(gè)文件包含了數(shù)據(jù)庫(kù)的所有信息。可移植性,可以快速、無(wú)縫移值到幾乎所有的操作系統(tǒng)語(yǔ)言無(wú)關(guān)性,可以支持很多的語(yǔ)言事務(wù)性,采用獨(dú)立事務(wù)處理機(jī)制,使用數(shù)據(jù)庫(kù)獨(dú)占性和共享鎖處理事務(wù)。sqlite數(shù)據(jù)庫(kù)支持null、integer、real、text、blob這5種數(shù)據(jù)類(lèi)型,在處理varchar(n),char(n),decimal(p,s)等數(shù)據(jù)類(lèi)型時(shí),sql

30、ite數(shù)據(jù)庫(kù)會(huì)將數(shù)據(jù)轉(zhuǎn)換為其支持的上述5種數(shù)據(jù)類(lèi)型。4.2 數(shù)據(jù)庫(kù)實(shí)現(xiàn)類(lèi)及數(shù)據(jù)庫(kù)工具類(lèi)4.2.1 數(shù)據(jù)庫(kù)實(shí)現(xiàn)類(lèi)dbhelpersqliteopenhelper10是 android平臺(tái)提供給我們一個(gè)數(shù)據(jù)庫(kù)輔助類(lèi),dbhelper繼承自sqliteopenhelper類(lèi),負(fù)責(zé)數(shù)據(jù)庫(kù)的創(chuàng)建、更新、打開(kāi),用戶(hù)書(shū)簽表(user_mark)、系統(tǒng)書(shū)簽表(sys_mark)的創(chuàng)建。在dbhelper中定義了用戶(hù)書(shū)簽表和系統(tǒng)書(shū)簽表中各個(gè)屬性字段的字符串常量,以及創(chuàng)建兩種表要用到數(shù)據(jù)庫(kù)語(yǔ)句,這樣方便對(duì)這些字段和語(yǔ)句進(jìn)行保存和維護(hù)。創(chuàng)建數(shù)據(jù)表的語(yǔ)句11:create table 表名(字段1 數(shù)據(jù)類(lèi)型 prim

31、ary key autoincrement, 字段1 數(shù)據(jù)類(lèi)型,)oncreate(sqlitedatabase db) : 當(dāng)數(shù)據(jù)庫(kù)被首次創(chuàng)建時(shí)執(zhí)行該方法,一般將創(chuàng)建表等初始化操作在該方法中執(zhí)行(代碼如下):public void oncreate(sqlitedatabase db)db.execsql(create_table_sys_mark);db.execsql(create_table_user_mark);4.2.2 數(shù)據(jù)庫(kù)操作工具類(lèi)dbutil負(fù)責(zé)用戶(hù)書(shū)簽表(user_mark)和系統(tǒng)書(shū)簽表(sys_mark)的增、刪、改、查操作控制。主要方法:(1)inidb方法用來(lái)初始化

32、數(shù)據(jù)庫(kù)對(duì)象當(dāng)創(chuàng)建dbhelper實(shí)例時(shí),dbhelper中的oncreate方法會(huì)創(chuàng)建名字分別為user_mark和sys_mark的數(shù)據(jù)表,再通過(guò)dbhelper實(shí)例調(diào)用繼承自父類(lèi)sqliteopenhelper中的方法getreadabledatabase便可獲得sqlitedatabase 對(duì)象,這時(shí)的sqlitedatabase對(duì)象中就包含user_mark和sys_mark兩張數(shù)據(jù)表。在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)要進(jìn)行判斷,數(shù)據(jù)庫(kù)對(duì)象是否為null或關(guān)閉狀態(tài)(部分代碼如下)。if (db = null | !db.isopen() openhelper = new dbhelper(mcontex

33、t);db = openhelper.getreadabledatabase(); (2)insert_sysmark方法為向sys_mark表中添加系統(tǒng)書(shū)簽操作在插入書(shū)簽記錄的過(guò)程中,需要定義一個(gè)contentvalues對(duì)象12。contentvalues對(duì)象與map對(duì)象相似,可以通過(guò)put(key,values)方法在contentvalues對(duì)象內(nèi)保存一系列的鍵值對(duì),key要與各個(gè)字段屬性名保持一致。當(dāng)各個(gè)字段以鍵值對(duì)的形式保存入contentvalues對(duì)象中,contentvalues對(duì)象就是一條書(shū)簽記錄。通過(guò)sqlitedatabase對(duì)象的insert方法可以把contentv

34、alues對(duì)象插入書(shū)簽表中,第1個(gè)參數(shù)是指定的數(shù)據(jù)表名;第3個(gè)參數(shù)是contentvalues對(duì)象;第2個(gè)參數(shù)指定一個(gè)列名,因?yàn)樵趕ql標(biāo)準(zhǔn)中不能插入全部字段為空的記錄,當(dāng)用戶(hù)需要插入全部字段為空的記錄時(shí),就會(huì)這個(gè)指定的字段賦null值再去執(zhí)行sql語(yǔ)句(部分代碼如下)。contentvalues.put(dbhelper.sys_file_path, filepath);contentvalues.put(dbhelper.sys_file_length, filelen);contentvalues.put(dbhelper.sys_charset_name, charsetname);c

35、ontentvalues.put(dbhelper.sys_byte_begin, bytebegin);db.insert(dbhelper.table_sys_mark, dbhelper.sys_charset_name,contentvalues);(3)search_sysmark方法為查詢(xún)sys_mark表中對(duì)應(yīng)的數(shù)據(jù)操作數(shù)據(jù)庫(kù)查詢(xún)后返回的是一個(gè)cursor游標(biāo)對(duì)象13,游標(biāo)對(duì)象可以理解為一個(gè)由符合查詢(xún)條件的記錄組成的一張二維表格。sqlitedatabase對(duì)象的查詢(xún)方法query中,第1個(gè)參數(shù)table是指定查詢(xún)的表名;第2個(gè)參數(shù)columns是查詢(xún)后返回的字段;第3個(gè)參數(shù)se

36、lection是where后面的條件語(yǔ)句;第4個(gè)參數(shù)selectionargs數(shù)組用來(lái)指定where語(yǔ)句中查詢(xún)字段的值;groupby分組語(yǔ)句;having排序語(yǔ)句;orderby排序語(yǔ)句(部分代碼如下)。cursor = db.query(dbhelper.table_sys_mark, new string dbhelper.sys_byte_begin, dbhelper.sys_charset_name ,dbhelper.sys_file_path + = + filepath + and + dbhelper.sys_file_length + = + filelen, null,

37、 null,null, null);(4)getsystabledates方法用來(lái)查詢(xún)sys_mark表中所有數(shù)據(jù)(5)update_sysmark方法為更新sys_mark表中閱讀頁(yè)首字符的字節(jié)起始位置因?yàn)閟ys_mark表記錄都是已經(jīng)添加到書(shū)架上圖書(shū),當(dāng)讀者點(diǎn)擊圖書(shū)進(jìn)入閱讀再返回書(shū)架或退出時(shí),返回或退出時(shí)的閱讀頁(yè)面已經(jīng)發(fā)生變化,那么首字符的字節(jié)起始位置也會(huì)發(fā)生變化,這時(shí)update_sysmark方法就會(huì)自動(dòng)更新這本圖書(shū)的記錄,以便下次讀者繼續(xù)閱讀同一本圖書(shū)時(shí)能接著閱讀。update方法的第1個(gè)參數(shù)table是要更新數(shù)據(jù)所在的表名;第2個(gè)參數(shù)contentvalues是要更新的字段數(shù)據(jù);第

38、3個(gè)參數(shù)whereclause是查詢(xún)條件;第4個(gè)參數(shù)是與第三個(gè)參數(shù)相關(guān)聯(lián)的的條件值(部分代碼如下)。db.update(dbhelper.table_sys_mark, contentvalues,dbhelper.sys_file_path + = + filepath + and + dbhelper.sys_file_length + = + filelen, null);(6)del_sysmark方法為刪除sys_mark表中對(duì)應(yīng)的數(shù)據(jù)操作delete方法中的第1個(gè)參數(shù)table是指定操作的數(shù)據(jù)表;第2個(gè)參數(shù)whereclause是條件;第3個(gè)參數(shù)whereargs是一個(gè)字符串?dāng)?shù)據(jù),

39、與第2個(gè)參數(shù)相關(guān)聯(lián)的條件值(部分代碼如下)。db.delete(dbhelper.table_sys_mark, dbhelper.sys_id+=+id, null);(7)search_usermark方法用來(lái)查詢(xún)并返回user_mark表中所有數(shù)據(jù)在search_usermark方法中,所有的用戶(hù)書(shū)簽數(shù)據(jù)在查詢(xún)后以按id倒序排列的形式返回,這是因?yàn)橛脩?hù)書(shū)簽在插入時(shí)類(lèi)似于棧的先進(jìn)后出,先插入的書(shū)簽顯示在下面,后插入的書(shū)簽顯示在上邊。(8)insert_usermark方法為向user_mark表中添加用戶(hù)書(shū)簽操作(9)del_usermark方法為刪除user_mark表中對(duì)應(yīng)的數(shù)據(jù)操作4

40、.3 書(shū)架繪制類(lèi)bookshelfgridview主要用來(lái)對(duì)書(shū)架的背景進(jìn)行繪制14。在構(gòu)造方法中調(diào)用bitmapfactory.decoderesource方法的主要作用是獲得單行書(shū)架背景樣式,第1個(gè)參數(shù)是要加載的位圖資源文件的對(duì)象(一般寫(xiě)成 getresources()就可以);第2個(gè)是需要加載的位圖資源的id,r.drawable.bookshelf_line是單行書(shū)架背景圖片的id(部分代碼如下)。bookshelflinebg = bitmapfactory.decoderesource(getresources(),r.drawable.bookshelf_line);dispatc

41、hdraw(canvas canvas)方法能對(duì)當(dāng)前組件的各個(gè)子組件進(jìn)行繪制(每個(gè)子組件都是一行書(shū)架背景),首先通過(guò)getheight()和getwidth()得到當(dāng)前頁(yè)面的長(zhǎng)和寬以及每個(gè)子組件的長(zhǎng)和寬,然后通過(guò)循環(huán)語(yǔ)句逐行繪制書(shū)架(部分代碼如下)。每繪制一次,都需要使用畫(huà)布類(lèi)canvas調(diào)用它drawbitmap方法,第1個(gè)參數(shù)是用來(lái)繪制的位圖資源類(lèi);第2個(gè)參數(shù)是繪制起始點(diǎn)的x坐標(biāo);第3個(gè)參數(shù)是繪制起始點(diǎn)的y坐標(biāo);最后一個(gè)參數(shù)直接寫(xiě)null就可以。for (int y = top; y height; y += backgroundheight) for (int x = 0; x widt

42、h; x += backgroundwidth) canvas.drawbitmap(bookshelflinebg, x, y, null);在視圖資源文件book_shelf.xml中,以net.mynovelreader.bookshelfgridview為標(biāo)簽定義書(shū)架組件,并布局到該文件下,當(dāng)bookshelfactivity啟動(dòng)時(shí),oncreate方法中的setcontentview(r.layout.book_shelf)就能讓書(shū)架頁(yè)面得到初始化(部分代碼如下)。4.4 書(shū)架類(lèi)bookshelfactivity主要實(shí)現(xiàn)書(shū)架界面圖書(shū)的添加、刪除及點(diǎn)擊進(jìn)入該圖書(shū)閱讀界面的控制。主要方法

43、和實(shí)現(xiàn)顯示圖書(shū)信息的內(nèi)部類(lèi):(1)shlefadapter類(lèi)是書(shū)架上每個(gè)子項(xiàng)圖書(shū)顯示信息的自定義內(nèi)部適配器,繼承了基本適配器類(lèi)baseadapter(適配器是組件與數(shù)據(jù)之間的橋梁,負(fù)責(zé)把數(shù)據(jù)綁定到視圖組件上,使得數(shù)據(jù)能夠視圖化)viewholder類(lèi)是將每個(gè)項(xiàng)目中的控件封裝起來(lái)的類(lèi)。getview方法的作用是獲得要展示的單個(gè)子項(xiàng)圖書(shū),第1個(gè)參數(shù)position是該子項(xiàng)圖書(shū)在所有圖書(shū)項(xiàng)中排列的位置;第2個(gè)參數(shù)convertview在書(shū)架第一次顯示圖書(shū)時(shí)為null值,當(dāng)書(shū)架上的圖書(shū)過(guò)多時(shí),向上滾動(dòng)屏幕時(shí),屏幕上的圖書(shū)視圖發(fā)生變化時(shí),convertview不是null值;第3個(gè)參數(shù)parent是該子

44、項(xiàng)圖書(shū)最終會(huì)被附加到的父級(jí)組件,也就是書(shū)架組件。只有在convertview為null時(shí)才去實(shí)例化控件,創(chuàng)建convertview對(duì)象、holder對(duì)象,而convertview非null時(shí)不要實(shí)例化,否則每次都要實(shí)例化,讀者反復(fù)滑動(dòng)屏幕時(shí)會(huì)有“卡”的感覺(jué),不流暢??梢栽赾onvertview為null時(shí),創(chuàng)建viewholder的實(shí)例,通過(guò)convertview.settag(holder)把它保存到 convertview中,在convertview為非null時(shí)再通過(guò)convertview.gettag()取出holder(部分代碼如下)。剽竊文字表述1.結(jié)構(gòu)化方法的基本思想:把一個(gè)復(fù)雜

45、問(wèn)題的求解過(guò)程分階段進(jìn)行,而且這種分解是自頂向下,逐層分解,使得每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。04090713_鄭華超_基于android平臺(tái)的電子閱讀器_第2部分總文字復(fù)制比:14.9%(2231)總字?jǐn)?shù):150121基于android的交互式學(xué)習(xí)微閱覽器設(shè)計(jì)與實(shí)現(xiàn)王強(qiáng);鄭世玨;宋志明; - 現(xiàn)代教育技術(shù)- 2012-09-1511.8%是否引用:否2如何從oracle的存儲(chǔ)過(guò)程中訪問(wèn)操作系統(tǒng)的資源張揚(yáng)嵩; - 電腦編程技巧與維護(hù)- 2012-02-036.7%是否引用:否3手機(jī)平臺(tái)視頻客戶(hù)端的設(shè)計(jì)與實(shí)現(xiàn)葉慧誼; - 科技經(jīng)濟(jì)市場(chǎng)- 2011-07-156.7%是否引

46、用:否4java 下載網(wǎng)頁(yè)-相關(guān)文章 - 網(wǎng)絡(luò)(http:/www.360doc.co)- 2011-06-066.4%是否引用:否5胡博欽-基于android平臺(tái)的蛋白質(zhì)結(jié)構(gòu)檢索軟件設(shè)計(jì) - 大學(xué)生論文聯(lián)合比對(duì)庫(kù)- 20126.3%是否引用:否6基于android系統(tǒng)的智能家居軟件開(kāi)發(fā)俞寧歡 - 大學(xué)生論文聯(lián)合比對(duì)庫(kù)- 20125.4%是否引用:否7java中使用socket通訊的實(shí)現(xiàn)何詠明; - 長(zhǎng)江工程職業(yè)技術(shù)學(xué)院學(xué)報(bào)- 2012-12-205.0%是否引用:否8跨平臺(tái)數(shù)據(jù)異地自動(dòng)備份何軍; - 電腦編程技巧與維護(hù)- 2009-07-033.6%是否引用:否9java如何獲得文件編碼格式

47、 -北京達(dá)內(nèi)官網(wǎng) - 網(wǎng)絡(luò)(http:/www.bjtarena.)- 2010-06-190.9%是否引用:否10java如何獲得文件編碼格式j(luò)ava認(rèn)證考試 - 網(wǎng)絡(luò)(http:/it.kswchina.c)- 2010-05-280.9%是否引用:否11怎樣獲得文件的編碼格式-java版_中國(guó)程序員|程序插件|c語(yǔ)言|電腦維護(hù) - 網(wǎng)絡(luò)()-0.9%是否引用:否12java如何獲得文件編碼格式的方法 - 網(wǎng)絡(luò)(/)- 2011-03-270.9%是否引用:否13java如何獲得文件編碼格式-java頻道-中國(guó)it實(shí)

48、驗(yàn)室 - 網(wǎng)絡(luò)(http:/java.chinaitl)- 2011-03-080.9%是否引用:否14基于android的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)馬鳴;錢(qián)鴿; - 電腦知識(shí)與技術(shù)- 2012-09-250.5%是否引用:否15基于.net的實(shí)驗(yàn)教學(xué)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)姜衛(wèi)成 - 大學(xué)生論文聯(lián)合比對(duì)庫(kù)- 20110.3%是否引用:否if (contentview = null)contentview = layoutinflater.from(getapplicationcontext().inflate(r.layout.book_shelf_item, null);holder = new

49、 viewholder();holder.textview = (textview) contentview.findviewbyid(r.id.txt_book);contentview.settag(holder); else holder = (viewholder) contentview.gettag();(2)getbookshelfinfo從系統(tǒng)書(shū)簽表sys_mark中取得用戶(hù)添加過(guò)的圖書(shū)信息,用于將該圖書(shū)顯示到書(shū)架上(3)inibookshelf方法用來(lái)對(duì)書(shū)架上顯示的圖書(shū)信息進(jìn)行初始化先創(chuàng)建一個(gè)bookshelfadapter的實(shí)例adapter,然后通過(guò)bookshelf.s

50、etadapter(adapter)把圖書(shū)信息數(shù)據(jù)綁定到書(shū)架組件上,對(duì)書(shū)架設(shè)置點(diǎn)擊事件監(jiān)聽(tīng)器bookshelf.setonitemclicklistener,這樣子當(dāng)用戶(hù)點(diǎn)擊圖書(shū)時(shí)便能觸發(fā)事件對(duì)圖書(shū)進(jìn)行操作(部分代碼如下)。bookshelf.setadapter(adapter);bookshelf.setonitemclicklistener(new onitemclicklistener()在setonitemclicklistener的onitemclick方法,第1個(gè)參數(shù)adapterview是指圖書(shū)數(shù)據(jù)源,也就是適配器對(duì)象adapter;第2參數(shù)view是監(jiān)聽(tīng)到的被操作控件,就是用

51、戶(hù)當(dāng)前點(diǎn)擊的圖書(shū)對(duì)象;第3個(gè)參數(shù)position是被點(diǎn)擊圖書(shū)在所有圖書(shū)中的位置;position在onitemclick方法中可以用來(lái)判斷用戶(hù)點(diǎn)擊的圖書(shū)是第一個(gè)還是非第一個(gè),如果是第一個(gè)則跳轉(zhuǎn)到查找文本文件的activity,否則就獲取點(diǎn)擊的文本的路徑和id以便進(jìn)行后續(xù)的打開(kāi)或刪除文本記錄操作(部分代碼如下)。if (position = 0) intent intent = new intent(bookshelfactivity.this,findfilesactivity.class);startactivityforresult(intent, 0); else .if (syscur

52、sor != null& syscursor.movetoposition(position - 1) filepath = syscursor.getstring(syscursor.getcolumnindex(dbhelper.sys_file_path);id = syscursor.getint(syscursor.getcolumnindex(dbhelper.sys_id);.(4)onactivityresult方法為取得用戶(hù)從sd卡中選擇要顯示到書(shū)架上的圖書(shū)信息后的返回信息intent類(lèi)能在activity、service間傳遞調(diào)用請(qǐng)求以及傳輸數(shù)據(jù),bundle類(lèi)類(lèi)似于map

53、,用于存放key-value名值對(duì)形式的值,putxxx()用于往bundle對(duì)象放入數(shù)據(jù),getxxx()方法用于從bundle對(duì)象里獲取數(shù)據(jù)。在onactivityresult中,通過(guò)intent的實(shí)例調(diào)用getextras方法獲取從findfilesactivity圖書(shū)查找類(lèi)中返回的被選擇的圖書(shū)的信息,保存到bundle的實(shí)例中,然后提取文件路徑和長(zhǎng)度信息,通過(guò)dbutil.search_sysmark(filepath, flen) 查詢(xún)系統(tǒng)書(shū)簽表sys_mark中有無(wú)對(duì)應(yīng)記錄,不為null則表示書(shū)架上已經(jīng)存在改圖書(shū),否則把該圖書(shū)的記錄保存到系統(tǒng)書(shū)簽表sys_mark中(部分代碼如下)

54、。if (dbutil.search_sysmark(filepath, flen) != null)toast.maketext(bookshelfactivity.this, 該圖書(shū)已經(jīng)在書(shū)架中添加過(guò)了!,toast.length_long).show(); else .dbutil.insert_sysmark(filepath, flen, constant.charsetname, 0);onresume();4.5 找圖書(shū)的實(shí)現(xiàn)類(lèi)findfilesactivity主要實(shí)現(xiàn)從sd卡中,將查詢(xún)到的txt圖書(shū)信息傳遞回書(shū)架界面,以將小說(shuō)圖書(shū)添加到書(shū)架上。主要方法:(1) inflatelistview方法為取得當(dāng)前路徑目錄下包含的所有文件路徑信息,并把這些文件展示到文件列表中(2) initfiles方法為加載并顯示當(dāng)前路徑目錄下的所有文件(部分代碼如下)root和parentfile都是file文件類(lèi),parentfile用來(lái)保存當(dāng)前文件的路徑,以便從下級(jí)目錄進(jìn)行返回操作。currentfiles是file類(lèi)型的數(shù)組,用來(lái)保存當(dāng)前目錄下所有的文件,通過(guò)root的listfiles方法可獲取該目錄下所有的文件并保存到currentfiles中。如果/mnt/sdcard和/sdcard兩種格式的sd卡根目錄都不存在,提示用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論