版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本科生畢業(yè)設(shè)計(jì)(論文)微博客戶端的設(shè)計(jì)開發(fā)微博客戶端的設(shè)計(jì)開發(fā)計(jì)08-3班題目:姓名:學(xué)號(hào):班級(jí):二〇一二年六月中國(guó)礦業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)姓名:學(xué)號(hào):學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)設(shè)計(jì)題目:微博客戶端的設(shè)計(jì)開發(fā)專題:指導(dǎo)教師:徐慧職稱:講師2012年6月徐州
中國(guó)礦業(yè)大學(xué)畢業(yè)設(shè)計(jì)任務(wù)書學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)年級(jí)計(jì)08級(jí)學(xué)生姓名任務(wù)下達(dá)日期:2012年1月10日畢業(yè)設(shè)計(jì)日期:2012年1月4日至2011年6月10日畢業(yè)設(shè)計(jì)題目:微博客戶端的設(shè)計(jì)開發(fā)畢業(yè)設(shè)計(jì)專題題目:畢業(yè)設(shè)計(jì)主要內(nèi)容和要求:畢業(yè)設(shè)計(jì)的軟件內(nèi)容及要求:1.
用戶界面美觀實(shí)用,便于各功能頁(yè)面導(dǎo)航。2.
系統(tǒng)各功能模塊要明確劃分。論文的內(nèi)容及要求:1.
論文對(duì)系統(tǒng)設(shè)計(jì)的思想進(jìn)行詳細(xì)描述,介紹整個(gè)軟件開發(fā)過(guò)程。2.
進(jìn)行系統(tǒng)需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),性能測(cè)試。3.
說(shuō)明開發(fā)過(guò)程中遇到的問(wèn)題極其解決方法。4.
最后寫出軟件開發(fā)的體會(huì)及收獲。5.
嚴(yán)格按照軟件工程要求的格式編寫文檔。院長(zhǎng)簽字:指導(dǎo)教師簽字:
中國(guó)礦業(yè)大學(xué)畢業(yè)設(shè)計(jì)指導(dǎo)教師評(píng)閱書指導(dǎo)教師評(píng)語(yǔ)(①基礎(chǔ)理論及基本技能的掌握;②獨(dú)立解決實(shí)際問(wèn)題的能力;③研究?jī)?nèi)容的理論依據(jù)和技術(shù)方法;④取得的主要成果及創(chuàng)新點(diǎn);⑤工作態(tài)度及工作量;⑥總體評(píng)價(jià)及建議成績(jī);⑦存在問(wèn)題;⑧是否同意答辯等):成績(jī):指導(dǎo)教師簽字:年月日
中國(guó)礦業(yè)大學(xué)畢業(yè)設(shè)計(jì)評(píng)閱教師評(píng)閱書指導(dǎo)教師評(píng)語(yǔ)(①基礎(chǔ)理論及基本技能的掌握;②獨(dú)立解決實(shí)際問(wèn)題的能力;③研究?jī)?nèi)容的理論依據(jù)和技術(shù)方法;④取得的主要成果及創(chuàng)新點(diǎn);⑤工作態(tài)度及工作量;⑥總體評(píng)價(jià)及建議成績(jī);⑦存在問(wèn)題;⑧是否同意答辯等):成績(jī):指導(dǎo)教師簽字:年月日中國(guó)礦業(yè)大學(xué)畢業(yè)設(shè)計(jì)答辯及綜合成績(jī)答辯情況提出問(wèn)題回答問(wèn)題答辯委員會(huì)評(píng)語(yǔ)及建議成績(jī):答辯委員會(huì)主任簽字:年月日學(xué)院領(lǐng)導(dǎo)小組綜合評(píng)定成績(jī)學(xué)院領(lǐng)導(dǎo)小組負(fù)責(zé)人:年月日摘要微博即MicroBlog,網(wǎng)上昵稱圍脖,是一種非正式的迷你型博客,是一個(gè)基于用戶關(guān)系的信息分享、傳播及獲取平臺(tái)。用戶可以通過(guò)WEB、WAP以及各種客戶端組件個(gè)人社區(qū),以140字左右的文字更新信息,并實(shí)現(xiàn)即時(shí)分享。它是一種互動(dòng)及傳播性極快的工具,傳播速度甚至比媒體還快。本文闡述了新浪微博客戶端的各種相關(guān)知識(shí),尤其對(duì)Android客戶端作了詳細(xì)的介紹,同時(shí)將設(shè)計(jì)過(guò)程中所用到的主要方法及控件進(jìn)行了詳細(xì)說(shuō)明。此次畢業(yè)設(shè)計(jì)以Android操作系統(tǒng)作為開發(fā)平臺(tái),Eclipse作為開發(fā)環(huán)境,參照新浪提供的API,進(jìn)行微博客戶端軟件的設(shè)計(jì)與實(shí)現(xiàn)。本軟件實(shí)現(xiàn)了微博首頁(yè)獲取數(shù)據(jù)、我的資料、好友資料、我的關(guān)注、我的粉絲、收藏微博、評(píng)論微博、轉(zhuǎn)發(fā)微博、發(fā)表微博等功能,具備了一般微博所具有的功能,具有較強(qiáng)的實(shí)用性。關(guān)鍵詞:Android平臺(tái);微博;OAuth認(rèn)證協(xié)議
ABSTRACT Microbloggingisarelationshipbasedonuserinformation-sharing,disseminationandaccessplatform.UserscanuseWEB,WAPindividualcomponentsandavarietyofclientcommunitiestointerabout140wordsoftextupdates,andsharethisinstantly.Itisaninteractiveandfastspreadtool,spreadevenfasterthanthetraditionalmedia. ThisarticleintroducesthedevelopmentofAndroid-basedmicrobloggingsystem,thesystemisdividedintoserver-sideandmobileclient.MicrobloggingsystemusestheMVCdesignpattern,thethree-layerarchitecture.ThedevelopmenttoolsistheEclipse.ThedevelopingenvironmentisJDK7.0andtheAndroid2.3andusesinarestAPI.Thissinaandroidmicroblogimplementlogining,register,releasemicroblogging,visittheFriendsHomePage,uploadphotos,updatestatusandsoon.Excepttheabovefunctions,inmobileclient,thetablefordiscussionandreal-timemicrobloggingupdateremindersareadded.DesignandImplementationofthetablefunctionistoresolvetheproblemofthemicrobloggingandmobilizetheenthusiasmoftheusers.Keywords:Android;Microblog;OAuthprotocol
目錄1緒論 頁(yè)1緒論1.1開發(fā)背景及意義1.1.1開發(fā)背景2006年3月,博客技術(shù)先驅(qū)blogger創(chuàng)始人埃文·威廉姆斯(EvanWilliams)創(chuàng)建的新興公司Twitter推出了微博服務(wù)。在最初階段,這項(xiàng)服務(wù)只是用于向好友的手機(jī)發(fā)送文本信息。Twitter英文原意為小鳥的嘰嘰喳喳聲,用戶能用如發(fā)手機(jī)短信的數(shù)百種工具更新信息。Twitter的出現(xiàn)把世人的眼光引入了微博的小小世界里。Twitter是一個(gè)社交網(wǎng)絡(luò)及微博客服務(wù)?,F(xiàn)在,用戶可以經(jīng)由SMS、即時(shí)通信、電郵、Twitter網(wǎng)站或Twitter客戶端軟件(如Twitterrific)輸入最多140字的文字更新,Twitter被Alexa網(wǎng)頁(yè)流量統(tǒng)計(jì)評(píng)定為最受歡迎的50個(gè)網(wǎng)絡(luò)應(yīng)用之一。在2007年5月,國(guó)際間計(jì)算總共有111個(gè)類似Twitter的網(wǎng)站。然而,最值得注意的仍是Twitter,它于2007年在得克薩斯州奧斯汀舉辦的南非西南會(huì)議贏得了博客類的網(wǎng)站獎(jiǎng)。Twitter的主要競(jìng)爭(zhēng)對(duì)手是Plurk和Jaiku。后來(lái)微博客的新服務(wù)特色持續(xù)誕生,例如Plurk有時(shí)間軸可以觀看整合了視訊和照片的分享,Identi、Pownce整合了微薄客加上檔案分享和事件邀請(qǐng)。Twitter在國(guó)外的“大紅大紫”,令國(guó)內(nèi)有些人終于坐不住了。2005年從校內(nèi)網(wǎng)起家的王興,在2006年把企業(yè)賣給千橡互動(dòng)后,于第二年建立了飯否網(wǎng)。同樣擅長(zhǎng)技術(shù)活的SwiSen也瞄準(zhǔn)了這個(gè)行業(yè),很快清新、簡(jiǎn)約的隨心微博也開始正式上線。而騰訊作為一個(gè)擁有4.1億QQ用戶的企業(yè),看著用戶對(duì)隨時(shí)隨地發(fā)布自己狀態(tài)的強(qiáng)烈需求后,也忍不住嘗試了一把,2007年8月13日騰訊滔滔上線。但事實(shí)證明,Twitter建立的“微型王國(guó)”不是在短時(shí)間內(nèi)掘出黃金的淺礦,國(guó)內(nèi)的微博目在當(dāng)時(shí)尚處于慢熱的狀態(tài)。據(jù)悉,隨心微博、飯否網(wǎng)等目前僅擁有幾十萬(wàn)用戶,每月處理幾千萬(wàn)條信息。國(guó)內(nèi)微博不約而同地將現(xiàn)在的目光放在了產(chǎn)品調(diào)整以及服務(wù)完善上,在尚無(wú)法吸引到風(fēng)險(xiǎn)投資的眼光之前,他們最需要做的可能是如何靠自己的能力繼續(xù)活下去。從2007年中國(guó)第一家?guī)в形⒉┥实娘埛窬W(wǎng)開張,到2009年,微博這個(gè)全新的名詞,以摧枯拉朽的姿態(tài)掃蕩世界,打敗奧巴馬、甲流等等名詞,成為全世界最流行的詞匯。伴隨而來(lái)的,是一場(chǎng)微博世界人氣的爭(zhēng)奪戰(zhàn),大批量的名人被各大網(wǎng)站招攬,各路名人也以微博為平臺(tái),在網(wǎng)絡(luò)世界里聚集人氣,同樣,新的傳播工具也造就了無(wú)數(shù)的草根英雄,從默默無(wú)聞到新的話語(yǔ)傳播者,往往只在一夜之間、寥寥數(shù)語(yǔ)。2009年7月中旬開始,國(guó)內(nèi)大批老牌微博產(chǎn)品(飯否、騰訊滔滔等)停止運(yùn)營(yíng),一些新產(chǎn)品開始進(jìn)入人們的視野,像1月份開放的大圍脖,6月份開放的Follow5,7月份開放的貧嘴,8月份開放的新浪微博。其中Follow5在2009年7月19日孫楠大連演唱會(huì)上的亮相,是國(guó)內(nèi)第一次將微博引入大型演藝活動(dòng),與twitter當(dāng)年的發(fā)展頗有幾分神似。2010年國(guó)內(nèi)微博迎來(lái)了春天,微博像雨后春筍般崛起。四大門戶網(wǎng)站均開設(shè)微博。根據(jù)相關(guān)公開數(shù)據(jù),截至2010年1月份,微博類產(chǎn)品在全球已經(jīng)擁有7500萬(wàn)注冊(cè)用戶。中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)發(fā)布的《第28次中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》報(bào)告顯示,2011年上半年,中國(guó)微博用戶從6331萬(wàn)增至1.95億,增長(zhǎng)約2倍。該《報(bào)告》指出,中國(guó)互聯(lián)網(wǎng)的普及率增至36.2%,較2010年增加1.9%。2011年上半年,我國(guó)微博用戶數(shù)量從6331萬(wàn)增至1.95億,半年增幅高達(dá)208.9%。微博在網(wǎng)民中的普及率從13.8%增至40.2%。從2010年底至今,手機(jī)微博在網(wǎng)民中的使用率比例從15.5%上升到34%。至今,新浪微博用戶數(shù)超過(guò)1億,得益于搶占了先機(jī),而且在整體的戰(zhàn)略執(zhí)行上也比較徹底到位,所以獲得了現(xiàn)在的地位。僅僅三年時(shí)間,新浪微博就為新浪生下了一個(gè)價(jià)值幾十億美金的‘金蛋’。開放API(OpenAPI)是SaaS(SoftwareasaService,軟件即服務(wù))模式下常見(jiàn)的一種應(yīng)用,網(wǎng)站的服務(wù)商將自己的網(wǎng)站服務(wù)封裝成一系列API(ApplicationProgrammingInterface,應(yīng)用編程接口)開放出去,供第三方開發(fā)者使用,這種行為就叫做開放網(wǎng)站的API,所開放的API就被稱作OpenAPI(開放API)。網(wǎng)站提供開放平臺(tái)的API后,可以吸引一些第三方的開發(fā)人員在該平臺(tái)上開發(fā)商業(yè)應(yīng)用,平臺(tái)提供商可以獲得更多的流量與市場(chǎng)份額,第三方開發(fā)者不需要龐大的硬件與技術(shù)投資就可以輕松快捷的創(chuàng)業(yè),從而達(dá)到雙贏的目的,開放API是大平臺(tái)發(fā)展、共享的途徑,讓開發(fā)者開發(fā)一個(gè)有價(jià)值應(yīng)用,付出的成本更少,成功的機(jī)會(huì)更多。今天,OpenAPI作為互聯(lián)網(wǎng)在線服務(wù)的發(fā)展基礎(chǔ),已經(jīng)成為越來(lái)越多互聯(lián)網(wǎng)企業(yè)發(fā)展服務(wù)的必然選擇。OpenAPI的典型成功范例是GoogleMapsAPI和Twitter,GoogleMaps有Google這樣的大公司支持,成功當(dāng)然并不奇怪,但是Twitter的成功就很能說(shuō)明問(wèn)題。事實(shí)上,如果Twitter僅僅是一個(gè)網(wǎng)頁(yè)形式的微博客的話,Jaiku就可以輕松的將其打敗,Twitter根本不可能取得今天的成就。Twitter的活力就在于開放API,Twitter的成功和開放API密不可分。Twitter的開放API可以激發(fā)個(gè)人創(chuàng)作的積極性,引來(lái)了大量的第三方應(yīng)用,這些第三方應(yīng)用同時(shí)又?jǐn)U大了Twitter原有的功能,讓Twitter更好用,從而極大豐富了Twitter平臺(tái)自身的功用和樂(lè)趣,現(xiàn)在,Twitter超過(guò)一半的流量都是來(lái)自第三方API。隨著Twitter的OpenAPI發(fā)布數(shù)量不斷增加,運(yùn)營(yíng)過(guò)程中也開始暴露出一些問(wèn)題。OpenAPI的巨大的訪問(wèn)量引起了Twitter種種性能問(wèn)題,使得Twitter的穩(wěn)定性大為降低,為了支持大量的外部API,Twitter宕機(jī)頻繁,這估計(jì)是幾乎所有Twitter用戶都遇到過(guò)的現(xiàn)象。但即使如此,Twitter也沒(méi)有放棄對(duì)OpenAPI的支持。因?yàn)殚_放API是歷史的潮流,是必然的趨勢(shì),順之者昌,逆之者亡,Twitter之所以擊敗眾多各式各樣的微博客網(wǎng)站,開放API功不可沒(méi)。國(guó)內(nèi)的主流微博服務(wù)也紛紛開放了api,供廣大第三方開發(fā)者接入微博提供了途徑。本論文就是利用新浪微博的開放api來(lái)完成的。1.1.2意義微博,有點(diǎn)像聊天室或者說(shuō)是像茶樓酒肆。是溝通人與人之間思想,交流知識(shí),討論問(wèn)題和交換觀點(diǎn)的網(wǎng)絡(luò)交際平臺(tái)。在這個(gè)平臺(tái)上首先是虛擬的人(性別,年齡,職業(yè),喜好,職務(wù)...等?)共同談?wù)撃闼信d趣的任何話題,通過(guò)你們之間交流爭(zhēng)辯讓你對(duì)它有更進(jìn)一步的了解和認(rèn)知。微博的傳播速度更快,關(guān)注的人更多,時(shí)效性更強(qiáng)。微博上有許多信息是在傳統(tǒng)媒體上看不到的,而公眾對(duì)公共話題天生有一種關(guān)注心態(tài),在微博上企業(yè)和客戶之間不再是單純的買賣關(guān)系,微博用好了,就能夠在企業(yè)用戶中培養(yǎng)出超越買賣的情感關(guān)系,在市場(chǎng)競(jìng)爭(zhēng)中游刃有余。傳統(tǒng)的企業(yè)口碑營(yíng)銷,偏重在認(rèn)識(shí)的人之間的口碑,但現(xiàn)在,越來(lái)越多的年輕人相信網(wǎng)絡(luò)社群上不認(rèn)識(shí)的“親朋好友”的評(píng)價(jià)。因此,贏得網(wǎng)友的口碑,對(duì)企業(yè)而言,幾乎跟花錢做廣告一樣重要。微博客的出現(xiàn)豐富了企業(yè)網(wǎng)絡(luò)營(yíng)銷的手段,幫助企業(yè)“贏得”陌生人的口碑。新浪微博主要用戶群體集中在影視明星、企業(yè)高管、經(jīng)濟(jì)學(xué)者、傳媒專家、營(yíng)銷策劃人、評(píng)論員、主持人(主播)、創(chuàng)業(yè)者、網(wǎng)絡(luò)紅人,這些人基本上代表著顛覆與變革、創(chuàng)新與時(shí)尚。微博客作為一個(gè)新的交流互動(dòng)平臺(tái),正在受到越來(lái)越多人的青睞。相比博客而言,微博客使用更加簡(jiǎn)單,用戶所付出的單位成本、精力投入都更少,寫作門檻更低,用戶擴(kuò)展更為迅速,為可能實(shí)現(xiàn)的媒體信息傳播積累了龐大的通訊員隊(duì)伍。同時(shí),整合各類工具尤其是手機(jī)短信的優(yōu)勢(shì),微博客具備了實(shí)時(shí)傳播的特性,在面對(duì)突發(fā)新聞事件時(shí),微博客的報(bào)道速度往往能領(lǐng)先于傳統(tǒng)媒體。隨著微博的“客”流量不但呈爆炸式增長(zhǎng),而且其影響力也與日俱增。微博客迅速成為中國(guó)企業(yè)及時(shí)傳播信息,增加用戶與企業(yè)粘性的營(yíng)銷利器。眾多中小企業(yè)紛紛設(shè)立官方微博客,安排專人在新浪微博客開博,與粉絲緊密互動(dòng),積極推廣企業(yè)品牌。微博預(yù)示著個(gè)體的力量不再孱弱,它在影響和改變這個(gè)世界上正發(fā)揮越來(lái)越大的作用。企業(yè)微博的最大價(jià)值在于構(gòu)建與用戶溝通的渠道和平臺(tái),高效傳達(dá)及展現(xiàn)企業(yè)產(chǎn)品與服務(wù),實(shí)現(xiàn)企業(yè)品牌的快速傳播。越來(lái)越多的傳統(tǒng)企業(yè)成功借助微博宣傳企業(yè)品牌與企業(yè)文化,通過(guò)建立口碑來(lái)獲得長(zhǎng)期利益。1.2開發(fā)工具及運(yùn)行環(huán)境1.2.1開發(fā)工具操作系統(tǒng):Windows7,SP1開發(fā)工具:EclipseIDEforJavaDevelopers,Version:IndigoServiceRelease2插件:AndroidDevelopmentTools(ADT)PluginforEclipse開發(fā)語(yǔ)言:Java1.2.2運(yùn)行環(huán)境手機(jī)型號(hào):摩托羅拉MB525操作系統(tǒng):AndroidGingerbread(2.3.7)硬件參數(shù):CPU:德州儀器OMAP3610,800MHzRam:512MB屏幕:3.7寸,854×480像素
2項(xiàng)目所用技術(shù)介紹2.1Andorid簡(jiǎn)介Android是一種以Linux為基礎(chǔ)的開放源代碼操作系統(tǒng),主要使用于便攜設(shè)備。目前尚未有統(tǒng)一中文名稱,中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由AndyRubin開發(fā),最初主要支持手機(jī)。2005年由Google收購(gòu)注資,并組建開放手機(jī)聯(lián)盟開發(fā)改良,逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上。Android的主要競(jìng)爭(zhēng)對(duì)手是蘋果公司的iOS以及RIM的BlackberryOS。2011年第一季度,Android在全球的市場(chǎng)份額首次超過(guò)塞班系統(tǒng),躍居全球第一。2012年2月數(shù)據(jù),Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng)52.5%的份額,中國(guó)市場(chǎng)占有率為68.4%。2.2Android系統(tǒng)架構(gòu)Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層。Android是以Linux為核心的手機(jī)操作平臺(tái),作為一款開放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語(yǔ)言來(lái)開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)。在Android中,開發(fā)者可以使用Java作為編程語(yǔ)言來(lái)開發(fā)應(yīng)用程序,也可以通過(guò)NDK使用C/C++作為編程語(yǔ)言來(lái)開發(fā)應(yīng)用程序,也可使用SL4A來(lái)使用其他各種腳本語(yǔ)言進(jìn)行編程(如:python、lua、tcl、php等等),還有其他諸如:Qt(qtforandroid)、Mono(monoforandroid)等一些著名編程框架也開始支持Android編程,甚至通過(guò)MonoDroid,開發(fā)者還可以使用C#作為編程語(yǔ)言來(lái)開發(fā)應(yīng)用程序。另外,谷歌還在2009年特別發(fā)布了針對(duì)初學(xué)者的AndroidSimple語(yǔ)言,該語(yǔ)言類似Basic語(yǔ)言。而在網(wǎng)頁(yè)編程語(yǔ)言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經(jīng)支持Android開發(fā)。而在Android系統(tǒng)底層方面,Android使用C/C++作為開發(fā)語(yǔ)言。2.3系統(tǒng)組件Android開發(fā)四大組件分別是:活動(dòng)(Activity):用于表現(xiàn)功能。服務(wù)(Service):后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver):用于接收廣播。內(nèi)容提供商(ContentProvider):支持在多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù)。2.3.1ActivityAndroid中,Activity是所有程序的根本,所有程序的流程都運(yùn)行在Activity之中,Activity可以算是開發(fā)者遇到的最頻繁,也是Android當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity一般代表手機(jī)屏幕的一屏。如果把手機(jī)比作一個(gè)瀏覽器,那么Activity就相當(dāng)于一個(gè)網(wǎng)頁(yè)。在Activity當(dāng)中可以添加一些Button、Checkbox等控件??梢钥吹紸ctivity概念和網(wǎng)頁(yè)的概念相當(dāng)類似。一般一個(gè)Android應(yīng)用是由多個(gè)Activity組成的。這多個(gè)Activity之間可以進(jìn)行相互跳轉(zhuǎn),例如,按下一個(gè)Button按鈕后,可能會(huì)跳轉(zhuǎn)到其他的Activity。和網(wǎng)頁(yè)跳轉(zhuǎn)稍微有些不一樣的是,Activity之間的跳轉(zhuǎn)有可能返回值,例如,從ActivityA跳轉(zhuǎn)到ActivityB,那么當(dāng)ActivityB運(yùn)行結(jié)束的時(shí)候,有可能會(huì)給ActivityA一個(gè)返回值。這樣做在很多時(shí)候是相當(dāng)方便的。當(dāng)打開一個(gè)新的屏幕時(shí),之前一個(gè)屏幕會(huì)被置為暫停狀態(tài),并且壓入歷史堆棧中。用戶可以通過(guò)回退操作返回到以前打開過(guò)的屏幕。我們可以選擇性的移除一些沒(méi)有必要保留的屏幕,應(yīng)為Android會(huì)把每個(gè)應(yīng)用的開始到當(dāng)前的每個(gè)屏幕保存在堆棧中。2.3.2ServiceService是android系統(tǒng)中的一種組件,它跟Activity的級(jí)別差不多,但是他不能自己運(yùn)行,只能后臺(tái)運(yùn)行,并且可以和其他組件進(jìn)行交互。Service是沒(méi)有界面的長(zhǎng)生命周期的代碼。Service是一種程序,它可以運(yùn)行很長(zhǎng)時(shí)間,但是它卻沒(méi)有用戶界面。這么說(shuō)有點(diǎn)枯燥,來(lái)看個(gè)例子。打開一個(gè)音樂(lè)播放器的程序,這個(gè)時(shí)候若想上網(wǎng)了,那么,我們打開Android瀏覽器,這個(gè)時(shí)候雖然我們已經(jīng)進(jìn)入了瀏覽器這個(gè)程序,但是,歌曲播放并沒(méi)有停止,而是在后臺(tái)繼續(xù)一首接著一首的播放。其實(shí)這個(gè)播放就是由播放音樂(lè)的Service進(jìn)行控制。當(dāng)然這個(gè)播放音樂(lè)的Service也可以停止,例如,當(dāng)播放列表里邊的歌曲都結(jié)束,或者用戶按下了停止音樂(lè)播放的快捷鍵等。service可以在和多場(chǎng)合的應(yīng)用中使用,比如播放多媒體的時(shí)候用戶啟動(dòng)了其他Activity這個(gè)時(shí)候程序要在后臺(tái)繼續(xù)播放,比如檢測(cè)SD卡上文件的變化,再或者在后臺(tái)記錄你地理信息位置的改變等等,總之服務(wù)嘛,總是藏在后頭的。2.3.3BroadcastReceiver在Android中,Broadcast是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制。而BroadcastReceiver是對(duì)發(fā)送出來(lái)的Broadcast進(jìn)行過(guò)濾接受并響應(yīng)的一類組件。可以使用BroadcastReceiver來(lái)讓應(yīng)用對(duì)一個(gè)外部的事件做出響應(yīng)。這是非常有意思的,例如,當(dāng)電話呼入這個(gè)外部事件到來(lái)的時(shí)候,可以利用BroadcastReceiver進(jìn)行處理。例如,當(dāng)下載一個(gè)程序成功完成的時(shí)候,仍然可以利用BroadcastReceiver進(jìn)行處理。BroadcastReceiver不能生成UI,也就是說(shuō)對(duì)于用戶來(lái)說(shuō)不是透明的,用戶是看不到的。BroadcastReceiver通過(guò)NotificationManager來(lái)通知用戶這些事情發(fā)生了。BroadcastReceiver既可以在AndroidManifest.xml中注冊(cè),也可以在運(yùn)行時(shí)的代碼中使用Context.registerReceiver()進(jìn)行注冊(cè)。只要是注冊(cè)了,當(dāng)事件來(lái)臨的時(shí)候,即使程序沒(méi)有啟動(dòng),系統(tǒng)也在需要的時(shí)候啟動(dòng)程序。各種應(yīng)用還可以通過(guò)使用Context.sendBroadcast()將它們自己的intentbroadcasts廣播給其他應(yīng)用程序。注冊(cè)BroadcastReceiver有兩種方式:(1)在AndroidManifest.xml進(jìn)行注冊(cè)。這種方法有一個(gè)特點(diǎn)即使你的應(yīng)用程序已經(jīng)關(guān)閉了,但這個(gè)BroadcastReceiver依然會(huì)接受廣播出來(lái)的對(duì)象,也就是說(shuō)無(wú)論你這個(gè)應(yīng)用程序時(shí)開還是關(guān)都屬于活動(dòng)狀態(tài)都可以接受到廣播的事件;(2)在代碼中注冊(cè)廣播。第一種俗稱靜態(tài)注冊(cè),第二種俗稱動(dòng)態(tài)注冊(cè),這兩種注冊(cè)BroadcastReceiver的區(qū)別:動(dòng)態(tài)注冊(cè)較靜態(tài)注冊(cè)靈活。實(shí)驗(yàn)證明:當(dāng)靜態(tài)注冊(cè)一個(gè)BroadcastReceiver時(shí),不論應(yīng)用程序是啟動(dòng)與否。都可以接受對(duì)應(yīng)的廣播。動(dòng)態(tài)注冊(cè)的時(shí)候,如果不執(zhí)行unregisterReceiver();方法取消注冊(cè),跟靜態(tài)是一樣的。但是如果執(zhí)行該方法,當(dāng)執(zhí)行過(guò)以后,就不能接受廣播了。2.3.4ContentProviderContentProvider是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問(wèn)方案。在Android中,對(duì)數(shù)據(jù)的保護(hù)是很嚴(yán)密的,除了放在SD卡中的數(shù)據(jù),一個(gè)應(yīng)用所持有的數(shù)據(jù)庫(kù)、文件、等等內(nèi)容,都是不允許其他直接訪問(wèn)的。Andorid當(dāng)然不會(huì)真的把每個(gè)應(yīng)用都做成一座孤島,它為所有應(yīng)用都準(zhǔn)備了一扇窗,這就是ContentProvider。應(yīng)用想對(duì)外提供的數(shù)據(jù),可以通過(guò)派生ContentProvider類,封裝成一枚ContentProvider,每個(gè)ContentProvider都用一個(gè)uri作為獨(dú)立的標(biāo)識(shí),形如:content://com.xxxxx。所有東西看著像REST的樣子,但實(shí)際上,它比REST更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實(shí)現(xiàn)者不需要按照這個(gè)模式來(lái)做,給你id的uri你也可以返回列表類型的數(shù)據(jù),只要調(diào)用者明白,就無(wú)妨,不用苛求所謂的REST。另外,ContentProvider不和REST一樣只有uri可用,還可以接受Projection,Selection,OrderBy等參數(shù),這樣,就可以像數(shù)據(jù)庫(kù)那樣進(jìn)行投影,選擇和排序。查詢到的結(jié)果,以Cursor(參見(jiàn):reference/android/database/Cursor.html)的形式進(jìn)行返回,調(diào)用者可以移動(dòng)Cursor來(lái)訪問(wèn)各列的數(shù)據(jù)。ContentProvider屏蔽了內(nèi)部數(shù)據(jù)的存儲(chǔ)細(xì)節(jié),向外提供了上述統(tǒng)一的接口模型,這樣的抽象層次,大大簡(jiǎn)化了上層應(yīng)用的書寫,也對(duì)數(shù)據(jù)的整合提供了更方便的途徑。ContentProvider內(nèi)部,常用數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn),Android提供了強(qiáng)大的Sqlite支持,但很多時(shí)候,你也可以封裝文件或其他混合的數(shù)據(jù)。在各大組件中,Service和ContentProvider都是那種需要持續(xù)訪問(wèn)的。Service如果是一個(gè)耗時(shí)的場(chǎng)景,往往會(huì)提供異步訪問(wèn)的接口,而ContentProvider不論效率如何,都提供的是約定的同步訪問(wèn)接口。3系統(tǒng)分析3.1功能需求此次程序設(shè)計(jì)任務(wù)是Android平臺(tái)下的新浪微博客戶端設(shè)計(jì),程序?qū)⒃谡鎸?shí)手機(jī)運(yùn)行調(diào)試。此次程序設(shè)計(jì)用戶界面要求較為友好,由于針對(duì)的用戶為Android智能手機(jī)用戶,因此程序的操作全部可以通過(guò)觸控完成操作。本新浪微博客戶端要求設(shè)計(jì)合理.在設(shè)計(jì)完成后,要求程序能夠?qū)崿F(xiàn)新浪微博的登錄功能。同時(shí),程序還必須能夠?qū)崿F(xiàn)對(duì)對(duì)新浪微博的首頁(yè)信息獲取,用戶資料,好友資料,發(fā)表微博,用戶的關(guān)注,用戶的粉絲,轉(zhuǎn)發(fā)微博,評(píng)論微博,收藏微博,我發(fā)表的微博等。最后,新浪微博獲取信息要具有較高的執(zhí)行效率。此次程序設(shè)計(jì)的操作系統(tǒng)要求為Windows7或Linux。此次程序設(shè)計(jì)需要在Eclipse環(huán)境下開發(fā)。本客戶端的數(shù)據(jù)都是通過(guò)網(wǎng)絡(luò)來(lái)自于新浪的服務(wù)器,產(chǎn)生的數(shù)據(jù)也是上傳到新浪的服務(wù)器,在客戶端存儲(chǔ)的只有OAuth產(chǎn)生的一些省份識(shí)別信息,所以本客戶端無(wú)需使用數(shù)據(jù)庫(kù)?;谙到y(tǒng)需求分析,該系統(tǒng)需要實(shí)現(xiàn)以下功能:(1)用戶登錄授權(quán):當(dāng)用戶第一次使用該軟件時(shí),會(huì)打開新浪微博的授權(quán)頁(yè)面,如果是老用戶,則授權(quán)登錄,若是新用戶,則注冊(cè)新浪微博,然后跳轉(zhuǎn)到微博首頁(yè)。(2)發(fā)布微博:發(fā)布微博是微博的基本功能,用戶將自己想要向外界傳達(dá)的信息進(jìn)行發(fā)布,這是用戶向外傳播信息的最主要的途徑與方法。(3)修改用戶個(gè)人信息:用戶可以根據(jù)個(gè)人需要修改自己的信息,包括用戶名、email、心情、以及上傳頭像或者更改為其他頭像。(4)查看微博更新:在微博的首頁(yè)要顯示用戶關(guān)注的博友的最近微博更新,并能夠查看微博的評(píng)論,以及查看博友的主頁(yè)。3.2系統(tǒng)用例圖圖3-1系統(tǒng)用例圖4系統(tǒng)設(shè)計(jì)4.1程序總體架構(gòu)在三層結(jié)構(gòu)中(圖4-1),解決了客戶機(jī)/服務(wù)器模式面臨的許多問(wèn)題。通過(guò)劃分客戶與服務(wù)器之間的功能,分布式計(jì)算提供了一種把應(yīng)用中的用戶界面從企業(yè)邏輯中分離出來(lái)的自然方法。在分布式環(huán)境下,企業(yè)邏輯提供了一種把應(yīng)用中的用戶界面從企業(yè)邏輯中分離出來(lái)的自然方法。在分布式環(huán)境下,企業(yè)邏輯集中地安裝在應(yīng)用服務(wù)器上,這樣就降低了客戶端的負(fù)載,同時(shí)對(duì)敏感信息的訪問(wèn)也可以得到很好的控制。采用分布式計(jì)算有著多方面的技術(shù)優(yōu)勢(shì),包括:1)封裝性2)性能3)全性管理在分布式計(jì)算模式中,由于所有的商業(yè)邏輯都駐留在服務(wù)器端,信息管理部就可以十分方便地監(jiān)控服務(wù)器的運(yùn)行情況,很容易地控制訪問(wèn)服務(wù)器以及與服務(wù)器應(yīng)用打交道人員的數(shù)量。這可以大大簡(jiǎn)化管理員對(duì)系統(tǒng)的管理,減輕系統(tǒng)維護(hù)的工作量,并確保系統(tǒng)的可靠運(yùn)行。圖4-1三層客戶/服務(wù)器模型軟件設(shè)計(jì)時(shí),考慮到整個(gè)系統(tǒng)的延續(xù)性和可擴(kuò)充性,我們將系統(tǒng)應(yīng)用體系分為三部分:用戶表現(xiàn)層、數(shù)據(jù)訪問(wèn)層、商業(yè)邏輯層。(1)用戶表現(xiàn)層:處理用戶界面的功能;(2)數(shù)據(jù)訪問(wèn)層:在通常情況下指數(shù)據(jù)庫(kù);(3)商業(yè)邏輯層:指在程序中做出職能決策的那一部分功能。微博客戶端的結(jié)構(gòu)圖如下所示:
圖4-2微博客戶端結(jié)構(gòu)圖4.2模塊功能設(shè)計(jì)本新浪微博客戶端大致分為首頁(yè)、微博詳情、用戶信息、發(fā)布微博、查看評(píng)論等模塊,分別負(fù)責(zé)不同的功能:授權(quán)模塊:訪問(wèn)用戶的信息與數(shù)據(jù)需要經(jīng)過(guò)用戶的授權(quán),所以必須有用戶授權(quán)的模塊本軟件才能正常使用。首頁(yè):是用戶瀏覽微博的界面,會(huì)將用戶所關(guān)注的人的微博按照時(shí)間先后順序排列,其中會(huì)顯示微博的作者、發(fā)布時(shí)間、內(nèi)容、轉(zhuǎn)發(fā)評(píng)論數(shù)量、發(fā)布方式等。首頁(yè)是用戶使用最多的界面,也是軟件初次打開的默認(rèn)界面。微博詳情:當(dāng)用戶在首頁(yè)瀏覽微博的時(shí)候,點(diǎn)擊某一條微博就會(huì)進(jìn)入到微博詳情的界面,這個(gè)界面會(huì)更詳細(xì)的展示用戶所點(diǎn)擊的那條微博,并且提供轉(zhuǎn)發(fā)和評(píng)論的功能按鈕。用戶信息:用戶信息是展示用戶的界面,何以展示用戶本身的信息并修改,也可以查看任何用戶感興趣的用戶。發(fā)布微博:用來(lái)發(fā)布新微博的界面,轉(zhuǎn)發(fā)和評(píng)論的時(shí)候也會(huì)用到這個(gè)模塊。查看評(píng)論:用來(lái)瀏覽某一條微博的評(píng)論。
5詳細(xì)設(shè)計(jì)與編碼下面就對(duì)每個(gè)模塊的設(shè)計(jì)與開發(fā)進(jìn)行詳細(xì)敘述:5.1授權(quán)模塊新浪微博采用OAuth授權(quán)方式來(lái)使第三方應(yīng)用訪問(wèn)用戶的數(shù)據(jù),這樣的話第三方應(yīng)用就可以在不知道用戶帳號(hào)和密碼的情況下獲取用戶數(shù)據(jù)。OAuth協(xié)議為用戶資源的授權(quán)提供了一個(gè)安全的、開放而又簡(jiǎn)易的標(biāo)準(zhǔn)。與以往的授權(quán)方式不同之處是OAuth的授權(quán)不會(huì)使第三方觸及到用戶的帳號(hào)信息(如用戶名與密碼),即第三方無(wú)需使用用戶的用戶名與密碼就可以申請(qǐng)獲得該用戶資源的授權(quán),因此OAuth是安全的。OAuth協(xié)議為用戶資源的授權(quán)提供了一個(gè)安全的、開放而又簡(jiǎn)易的標(biāo)準(zhǔn)。同時(shí),任何第三方都可以使用OAuth認(rèn)證服務(wù),任何服務(wù)提供商都可以實(shí)現(xiàn)自身的OAuth認(rèn)證服務(wù),因而OAuth是開放的。業(yè)界提供了OAuth的多種實(shí)現(xiàn)如PHP、JavaScript,Java,Ruby等各種語(yǔ)言開發(fā)包,大大節(jié)約了程序員的時(shí)間,因而OAuth是簡(jiǎn)易的。目前互聯(lián)網(wǎng)很多服務(wù)如OpenAPI,很多大公司如Google,Yahoo,Microsoft等都提供了OAuth認(rèn)證服務(wù),這些都足以說(shuō)明OAuth標(biāo)準(zhǔn)逐漸成為開放資源授權(quán)的標(biāo)準(zhǔn)。5.1.1OAuth相關(guān)的三個(gè)URLRequestTokenURL:獲取未授權(quán)的RequestToken服務(wù)地址;UserAuthorizationURL:獲取用戶授權(quán)的RequestToken服務(wù)地址;AccessTokenURL:用授權(quán)的RequestToken換取AccessToken的服務(wù)地址。5.1.2OAuth相關(guān)的參數(shù)定義OAUTH_consumer_key:使用者的ID,OAuth服務(wù)的直接使用者是開發(fā)者開發(fā)出來(lái)的應(yīng)用。所以該參數(shù)值的獲取一般是要去OAuth服務(wù)提供商處注冊(cè)一個(gè)應(yīng)用,再獲取該應(yīng)用的OAUTH_consumer_key。OAUTH_consumer_secret:OAUTH_consumer_key對(duì)應(yīng)的密鑰。OAUTH_token:OAUTH進(jìn)行到最后一步得到的一個(gè)“令牌”,通過(guò)此“令牌”請(qǐng)求資源的網(wǎng)站就可以去擁有資源的網(wǎng)站抓取任意有權(quán)限可以被抓取的資源。OAUTH_token_secret:OAUTH_token對(duì)應(yīng)的私鑰OAUTH_signature_method:請(qǐng)求串的簽名方法,應(yīng)用每次向OAuth三個(gè)服務(wù)地址發(fā)送請(qǐng)求時(shí),必須對(duì)請(qǐng)求進(jìn)行簽名。簽名的方法有:HMAC-SHA1、RSA-SHA1與PLAINTEXT等三種。OAUTH_signature:用上面的簽名方法對(duì)請(qǐng)求的簽名。OAUTH_timestamp:發(fā)起請(qǐng)求的時(shí)間戳,其值是距197000:00:00GMT的秒數(shù),必須是大于0的整數(shù)。本次請(qǐng)求的時(shí)間戳必須大于或者等于上次的時(shí)間戳。OAUTH_nonce:隨機(jī)生成的字符串,用于防止請(qǐng)求的重放,防止外界的非法攻擊。OAUTH_version:OAuth的版本號(hào)。5.1.3OAuth認(rèn)證授權(quán)流程OAuth認(rèn)證授權(quán)就三個(gè)步驟,三句話可以概括:1.獲取未授權(quán)的RequestToken2.獲取用戶授權(quán)的RequestToken3.用授權(quán)的RequestToken換取AccessToken當(dāng)應(yīng)用拿到AccessToken后,就可以有權(quán)訪問(wèn)用戶授權(quán)的資源了。上面的三個(gè)步驟中,每個(gè)步驟分別請(qǐng)求一個(gè)URL,并且收到相關(guān)信息,并且拿到上步的相關(guān)信息去請(qǐng)求接下來(lái)的URL直到拿到AccessToken。具體每步執(zhí)行信息如下:A.使用者(第三方應(yīng)用)向OAUTH服務(wù)提供商請(qǐng)求未授權(quán)的RequestToken。向RequestTokenURL發(fā)起請(qǐng)求,請(qǐng)求需要帶上參數(shù)。B.OAuth服務(wù)提供商同意使用者的請(qǐng)求,并向其頒發(fā)未經(jīng)用戶授權(quán)的oauth_token與對(duì)應(yīng)的oauth_token_secret,并返回給使用者。C.使用者向OAuth服務(wù)提供商請(qǐng)求用戶授權(quán)的RequestToken。向UserAuthorizationURL發(fā)起請(qǐng)求,請(qǐng)求帶上上步拿到的未授權(quán)的token與其密鑰。D.OAuth服務(wù)提供商將引導(dǎo)用戶授權(quán)。該過(guò)程可能會(huì)提示用戶,你想將哪些受保護(hù)的資源授權(quán)給該應(yīng)用。此步可能會(huì)返回授權(quán)的RequestToken也可能不返回。如YahooOAuth就不會(huì)返回任何信息給使用者。E.RequestToken授權(quán)后,使用者將向AccessTokenURL發(fā)起請(qǐng)求,將上步授權(quán)的RequestToken換取成AccessToken。F.OAuth服務(wù)提供商同意使用者的請(qǐng)求,并向其頒發(fā)AccessToken與對(duì)應(yīng)的密鑰,并返回給使用者。G.使用者以后就可以使用上步返回的AccessToken訪問(wèn)用戶授權(quán)的資源。從上面的步驟可以看出,用戶始終沒(méi)有將其用戶名與密碼等信息提供給使用者(第三方軟件),從而更安全。用OAuth實(shí)現(xiàn)背景一節(jié)中的典型案例:當(dāng)服務(wù)B(打印服務(wù))要訪問(wèn)用戶的服務(wù)A(圖片服務(wù))時(shí),通過(guò)OAuth機(jī)制,服務(wù)B向服務(wù)A請(qǐng)求未經(jīng)用戶授權(quán)的RequestToken后,服務(wù)A將引導(dǎo)用戶在服務(wù)A的網(wǎng)站上登錄,并詢問(wèn)用戶是否將圖片服務(wù)授權(quán)給服務(wù)B。用戶同意后,服務(wù)B就可以訪問(wèn)用戶在服務(wù)A上的圖片服務(wù)。整個(gè)過(guò)程服務(wù)B沒(méi)有觸及到用戶在服務(wù)A的帳號(hào)信息。本軟件使用新浪微博的androidSDK來(lái)輔助開發(fā),這里面已經(jīng)集成了一個(gè)開源的javaOAuth認(rèn)證包:signpost:/p/oauth-signpost/。第三方應(yīng)用首先必須在新浪微博的開發(fā)者平臺(tái)上注冊(cè)成為開發(fā)者并且獲得相應(yīng)的appkey和appsecret才可以引導(dǎo)用戶注冊(cè)。新浪微博的開放平臺(tái)網(wǎng)址:/。requestToken=weibo.getOAuthRequestToken("xiha://OAuthActivity");OAuthConstant.getInstance().setRequestToken(requestToken);url=requestToken.getAuthenticationURL();Intentintent=newIntent(XihaActivity.this,ActivityWebView.class);intent.putExtra("url",url);startActivity(intent);首先設(shè)置RequestToken,”xiha://OAuthActivity”是一個(gè)android系統(tǒng)定義的uri,類似于url,一個(gè)協(xié)議后跟著一個(gè)路徑,當(dāng)授權(quán)成功后就打開注冊(cè)這個(gè)uri的頁(yè)面。獲取授權(quán)頁(yè)面的url后,通過(guò)一個(gè)intent傳到一個(gè)新的activity。在這個(gè)activity中,放置一個(gè)webview:web.loadUrl(url);這樣來(lái)打開授權(quán)頁(yè)面,效果如圖5-1所示:圖5-1授權(quán)頁(yè)面截圖授權(quán)成功后就會(huì)打開注冊(cè)"xiha://OAuthActivity"這個(gè)uri的Activity。5.2微博首頁(yè)模塊首先在manifest文件中為首頁(yè)的Activity下面這行代碼:<intent-filter> <actionandroid:name="ent.action.VIEW"/> <categoryandroid:name="ent.category.DEFAULT"/> <categoryandroid:name="ent.category.BROWSABLE"/> <dataandroid:scheme="xiha"android:host="OAuthActivity"/></intent-filter>這樣,當(dāng)用戶授權(quán)成功后就會(huì)打開這個(gè)Activity.在這個(gè)Activity中,主要是一個(gè)ListView,在ListView中的每一個(gè)條目中展示每一條微博。首先將獲得的Access_token和Access_token_secret存儲(chǔ)到sharedPreference中,這樣的話用戶只需在初次使用時(shí)需要授權(quán),以后就可以直接獲取數(shù)據(jù)了: prefs=PreferenceManager.getDefaultSharedPreferences(this); RequestTokenrequestToken=OAuthConstant.getInstance().getRequestToken(); AccessToken accessToken=requestToken.getAccessToken(uri.getQueryParameter("oauth_verifier"));SharedPreferences.Editoreditor=prefs.edit(); editor.putString("access_token",accessToken.getToken()); editor.putString("access_token_secret",accessToken.getTokenSecret()); mit();這樣就存儲(chǔ)量用戶的認(rèn)證數(shù)據(jù)。接下來(lái)我們獲得用戶關(guān)注的用戶的微博,只需下面這兩行代碼: weibo=OAuthConstant.getInstance().getWeibo(); friendsTimeline=weibo.getHomeTimeline(newPaging(1,10));由于獲取網(wǎng)絡(luò)數(shù)據(jù)所消耗的時(shí)間較長(zhǎng),且手機(jī)的網(wǎng)絡(luò)信號(hào)不穩(wěn)定因素更多,所以我們將它放在獨(dú)立的線程中來(lái)完成。當(dāng)然可以用java的線程來(lái)實(shí)現(xiàn),但是android為我們提供了更加簡(jiǎn)單和方便的方法,繼承AsyncTask這個(gè)類并實(shí)現(xiàn)其中的doInBackground方法,把你希望在獨(dú)立線程中執(zhí)行的代碼放在這個(gè)方法中,然后在主線程中執(zhí)行該類對(duì)象的exectue方法就可以了。這里選擇這中方法而不應(yīng)java自身提供的線程機(jī)制還有一個(gè)原因,就是andorid系統(tǒng)規(guī)定,只能在主線程中執(zhí)行對(duì)UI控件的操作,在其它線程中不行。但是在andorid提供的AsyncTask這個(gè)類允許在其它線程中對(duì)控件進(jìn)行操作。 在這個(gè)類中還有一個(gè)方法叫onPostExecute的方法,它是一個(gè)回調(diào)函數(shù),會(huì)在doInBackground執(zhí)行完之后自動(dòng)執(zhí)行,但是是在主線程中執(zhí)行,我們可以在這個(gè)方法中放置我們希望的語(yǔ)句。在這里我們會(huì)把獲得的數(shù)據(jù)傳給一個(gè)我們自己設(shè)置的Adapter。在Android中,用列表控件來(lái)顯示一組數(shù)據(jù),比如顯示存儲(chǔ)在數(shù)組中的很多人名,再比如顯示從數(shù)據(jù)庫(kù)查詢出來(lái)的結(jié)果列表。Android將顯示和數(shù)據(jù)分開來(lái)處理,在這二者中起到橋梁作用的就是adapter,示意圖如下:圖5-2列表控件、adapter、數(shù)據(jù)間的關(guān)系圖圖的左邊的是一個(gè)列表控件,他只是一個(gè)空間的集合,內(nèi)部含有以下子控件,真正的內(nèi)容是顯示在這些子控件中的,其實(shí)列表控件的就是一個(gè)空間的集合。圖的右邊是數(shù)據(jù)的集合,可以是數(shù)組,數(shù)據(jù)庫(kù),或者是任何組織方式的數(shù)據(jù)。圖的中間就是adapter,它是列表控件和數(shù)據(jù)間的橋梁,其中他指向的那個(gè)R.layout.childview就是將要放置在列表控件中的子控件,所以說(shuō),是adapter決定了列表控件中顯示的子控件的內(nèi)容。Android本身提供了一些基本的adapter,繼承結(jié)構(gòu)如下:圖5-3android系統(tǒng)內(nèi)置adapter繼承層次圖其中的BaseAdapter是一個(gè)抽象類,繼承它需要實(shí)現(xiàn)較多的方法,所以也就具有較高的靈活性,我們的Adapter就是繼承的這個(gè)類。我們的Adapter需要把獲得的數(shù)據(jù)作為構(gòu)造函數(shù)的參數(shù)傳入,然后來(lái)將其放入到相應(yīng)的微博控件中。在Android系統(tǒng)中,ui控件可以用代碼來(lái)構(gòu)造,也可以用xml文件來(lái)描述。后者就像是html和css,只能描繪靜態(tài)的外觀,事件監(jiān)聽(tīng)等動(dòng)態(tài)事件還是需要用代碼來(lái)完成的。后者將邏輯與展示分開,加快了開發(fā)效率,所以我們這次開發(fā)采用的是用xml文件來(lái)描述ui。我們先來(lái)定義子控件的樣式,最終效果是這樣的:圖5-4子控件效果圖這就是我們?cè)谥黜?yè)模塊中的每一個(gè)微博的樣式,最外面它是一個(gè)水平方向的Linerlayout,右邊又是一個(gè)數(shù)值方向的的Linerlayout,然后依次是用戶姓名,微博發(fā)布的時(shí)間,微博內(nèi)容,微博發(fā)布方式,轉(zhuǎn)發(fā)和評(píng)論數(shù)量。下面我們來(lái)詳細(xì)描述一下我們自己定義的adapter。自己的adapter繼承自BaseAdapter,需要實(shí)現(xiàn)其中四個(gè)方法:int
getCount();返回?cái)?shù)據(jù)的大小,這里我們返回從新浪微博一次取回的數(shù)據(jù)大小,所以我們返回friendsTimeline.size();Object
getItem(int
arg0);從數(shù)據(jù)集合中返回參數(shù)arg0指定的數(shù)據(jù),我們這里返回第arg0個(gè)微博,所以我們的代碼是這樣的:returnfriendsTimeline.get(location);long
getItemId(int
position);返回指定位置的數(shù)據(jù)的ID,我們這里返回的是新浪提供的微博ID,代碼如下:returnfriendsTimeline.get(position).getId();View
getView(int
position,
View
convertView,
ViewGroup
parent);這個(gè)方法很重要,它的功能是將相應(yīng)的數(shù)據(jù)放到一個(gè)子控件中,然后返回子控件,供父控件(列表控件)使用。第一個(gè)參數(shù)指定出數(shù)據(jù)的位置,第二個(gè)參數(shù)是要傳給父控件的子控件,第三個(gè)參數(shù)是父控件。因?yàn)樵谖覀冞@個(gè)程序中這個(gè)adapter是專門為某一個(gè)列表控件實(shí)例化的,所以這最后一個(gè)參數(shù)對(duì)我們沒(méi)有作用。首先,獲得子控件:LayoutInflaterlayoutInflater=LayoutInflater.from(context);convertView=layoutInflater.inflate(R.layout.itemview,null);然后找到需要展示的數(shù)據(jù):Statusstatus=friendsTimeline.get(position);下一步是將數(shù)據(jù)放到相應(yīng)的控件中,我們這里以微博正文為例,其他控件的展示和這個(gè)大致相同:TextViewtexText=(TextView)singleView.findViewById(R.id.tvItemContent);textText.setText(decorateString(status.getText()));像這樣的,把所有數(shù)據(jù)都放入到相應(yīng)的控件中后,我們就可以返回這個(gè)待演示的子控件了:ReturncontertView;Android程序默認(rèn)是在一個(gè)線程中執(zhí)行,但是可以在需要的時(shí)候開辟新的線程。Andorid系統(tǒng)本身為線程間通信提供了hangler這樣一個(gè)非常好用的工具。從新浪微博返回的微博數(shù)據(jù)中,所有的圖片信息都是一個(gè)url,所以我們需要自己根據(jù)url從網(wǎng)絡(luò)上下載,這又是一個(gè)耗時(shí)操作,所以這里我們用新線程來(lái)執(zhí)行這個(gè)操作,獲取圖片后通過(guò)handler傳回到主線程,在主線程中完成對(duì)imageView的操作。每一條微博最多會(huì)有兩張圖片,其中的用戶頭像一定會(huì)有,另外一個(gè)是微博配圖,這個(gè)不一定都有,需要自行判斷。如果某一條微博是轉(zhuǎn)發(fā)微博,那么這個(gè)微博配圖是出現(xiàn)在他轉(zhuǎn)發(fā)的那條微博中的。在某一條微博中,需要換一種顏色顯示人名和話題。新浪微博規(guī)定:@符號(hào)后面跟著的是某一個(gè)用戶的名稱,用一個(gè)空格或者是“:”來(lái)結(jié)束;用兩個(gè)“#”來(lái)確定一個(gè)話題。微博中會(huì)有一些表情,由“[”和“]”括起來(lái)的,在現(xiàn)實(shí)時(shí)需要將其轉(zhuǎn)化為相應(yīng)的圖片,比如[呵呵]這些代表表情的文本。在文本中找到某些文本,我們自然而然地想到了正則表達(dá)式這個(gè)強(qiáng)大的文本處理工具,我們這個(gè)程序就用正則表達(dá)式來(lái)處理這個(gè)高亮顯示和表情準(zhǔn)換問(wèn)題。pattern=Ppile("@\\w+[\\s:]|@\\w+$|#\\w+#");m=pattern.matcher(content);第一行我們生成了一個(gè)模式,他有三個(gè)規(guī)則:第一個(gè)“@\\w+[\\s:]”匹配“@”和“:”之間或“@”和空格之間的用戶名,第二個(gè)“@\\w+$”匹配位于字符串最后的用戶名,最后一個(gè)規(guī)則“#\\w+#”匹配兩個(gè)“#”號(hào)之間的話題名稱。SpannableStringspannable=newSpannableString(content);構(gòu)建一個(gè)SpannableString,這個(gè)就是我們要修飾的字符串,用原始的數(shù)據(jù)將其初始化。然后依次便利源字符串的每一個(gè)匹配規(guī)則,都將匹配的子字符串的顏色改為藍(lán)色:while(m.find()){ intstart=m.start(); intend=m.end(); ForegroundColorSpanspan=newForegroundColorSpan(Color.BLUE); spannable.setSpan(span,start,end,Spannable.SPAN_INCLUSIVE_INCLUSIVE);}下面完成表情的替換。首先我們從網(wǎng)上下載新浪的表情包,將其放在資源文件夾Drawable中,這樣的話系統(tǒng)就會(huì)為每個(gè)表情圖片生成一個(gè)資源ID,我們就可以在程序中引用了。然后,制作一個(gè)Map容器,鍵是一個(gè)字符串,是表情的名稱,比如“[呵呵]”,值是一個(gè)整形變量,就是這個(gè)表情圖片的ID。然后我們用正則表達(dá)式匹配每一個(gè)表情,然后在這個(gè)map中找到相應(yīng)的表情圖片,然后替換,代碼如下:Patternpattern=Ppile("\\[\\w+\\]");Matcherm=pattern.matcher(content);SpannableStringspannable=newSpannableString(content);while(m.find()){ intstart=m.start(); intend=m.end(); Integerid=BiaoQing.getInstance().getInt(m.group()); if(id!=null) { Drawabledrawable=context.getResources().getDrawable(id); drawable.setBounds(0,0,drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); ImageSpanspan=newImageSpan(drawable,ImageSpan.ALIGN_BASELINE);spannable.setSpan(span,start,end,Spannable.SPAN_INCLUSIVE_INCLUSIVE); }}在新浪微博返回的微博來(lái)源中,來(lái)源的形式是一個(gè)html的產(chǎn)鏈接標(biāo)簽,<a>來(lái)源</a>,這里還是用正則表達(dá)式將其漢字內(nèi)容提取出來(lái),具體代碼和前面使用正則表達(dá)式類似。最后首頁(yè)的效果圖如圖5-5所示:圖5-5首頁(yè)模塊截圖我們傳給adapter的微博數(shù)量只有10條,當(dāng)用戶瀏覽到最后一條時(shí),我們希望可以獲得更多的數(shù)據(jù),我們這里用ListView的footView來(lái)實(shí)現(xiàn)。首先用xml文件來(lái)定義一個(gè)footView,他的內(nèi)容是兩個(gè)控件,一個(gè)是按鈕,一個(gè)是processBar,這兩個(gè)控件不回同時(shí)出現(xiàn),默認(rèn)顯示按鈕,當(dāng)用戶點(diǎn)擊時(shí)就加載新的數(shù)據(jù),同時(shí)這個(gè)按鈕隱藏,processBar出現(xiàn);當(dāng)加載完成后,processBar隱藏,按鈕出現(xiàn)。在xml文件中,通過(guò)這個(gè)屬性:android:visibility="gone"來(lái)隱藏控件。moreView=getLayoutInflater().inflate(R.layout.more,null);//獲取在xml文件里定義的空間button=(Button)moreView.findViewById(R.id.morebutton);pb=(ProgressBar)moreView.findViewById(R.id.pb);moreLayout=(LinearLayout)moreView.findViewById(R.id.more);//找到相應(yīng)的控件myListView.addFooterView(moreView);//給列表控件添加footerViewmoreLayout.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ pb.setVisibility(View.VISIBLE); moreLayout.setVisibility(View.GONE); weiboAdapter.getMoreStatus(); }});//給該控件添加事件監(jiān)聽(tīng)器在這個(gè)按鈕中調(diào)用了weiboAdapter的getMoreStatus()方法。在這個(gè)方法中,我們從新浪微博獲取更多的數(shù)據(jù),我們首先記錄下已經(jīng)獲取的最后一條微博的ID,然后獲取ID號(hào)小于這個(gè)ID的微博,當(dāng)更新完數(shù)據(jù)后,記得要調(diào)用notifyDataSetChanged()這個(gè)方法,告訴系統(tǒng)數(shù)據(jù)發(fā)生了改變,系統(tǒng)會(huì)自動(dòng)幫我們完成其它所需的工作。最后,別忘了把processBar隱藏起來(lái),重新露出按鈕,效果如下:圖5-6“加載更多數(shù)據(jù)”按鈕截圖圖5-7processBar截圖5.2發(fā)布微博模塊5.2.1基本功能發(fā)布新的微博、評(píng)論微博與轉(zhuǎn)發(fā)微博都是在一個(gè)Activity中實(shí)現(xiàn)的,運(yùn)行截圖如圖5-8所示。本Activity布局文件的最外層是一個(gè)豎直方向的現(xiàn)行布局,其中有三個(gè)元素,第一個(gè)控件是一個(gè)文本輸入框,供用戶輸入要發(fā)布的微博內(nèi)容;第二個(gè)控件是一個(gè)簡(jiǎn)單的按鈕,用來(lái)執(zhí)行發(fā)布這個(gè)動(dòng)作;第三個(gè)控件是一個(gè)水平方向的線性布局,內(nèi)部包含5個(gè)圖像按鈕,分別對(duì)應(yīng)著發(fā)布微博時(shí)需要用到的五個(gè)功能:1.加入地理信息;2.添加圖片;3.@其他人;4.添加話題;5.添加表情。在布局文件中,給文本輸入框添加android:layout_weight="0.1"這條屬性,就可使該控件占據(jù)所有未被使用的屏幕空間。同樣的,在屏幕最下面的五個(gè)圖片控件里都賦予相同的權(quán)值,他們就會(huì)平分屏幕上的空間。圖5-8發(fā)布微博界面截圖因?yàn)榘l(fā)布微博、評(píng)論微博和轉(zhuǎn)發(fā)微博是使用的同一個(gè)Activity,所以必須區(qū)分開這三種不同的功能。本程序是在打開Activity的Intent的中設(shè)置一個(gè)名為type的整形變量作為額外的數(shù)據(jù)傳入到要打開的Activity中,然后在Activity中再判斷這個(gè)變量的值,根據(jù)不同的取值進(jìn)行不同的操作,比如說(shuō):如果是發(fā)布新微博和評(píng)論微博,文本輸入框里不需要填什么文字,只需要顯示“親,說(shuō)點(diǎn)什么吧~”這樣的提示字符就行了,但如果是轉(zhuǎn)發(fā)微博,且用戶要轉(zhuǎn)發(fā)的微博本身也是一條轉(zhuǎn)發(fā)的微博,此時(shí)就需要在文本輸入框里設(shè)置上一個(gè)轉(zhuǎn)發(fā)者轉(zhuǎn)發(fā)時(shí)的評(píng)論,截圖如圖5-9所示:圖5-9轉(zhuǎn)發(fā)微博界面截圖Android系統(tǒng)提供了一個(gè)TextWatcher這個(gè)接口,會(huì)監(jiān)視文本輸入框內(nèi)部文字的變化;每當(dāng)文本輸入框里的文字發(fā)生變化時(shí),接口內(nèi)部的一些回調(diào)函數(shù)就會(huì)被執(zhí)行,所以可以在這些函數(shù)內(nèi)進(jìn)行一些操作。本程序要將文本里代表表情的文字替換為圖片,所以把相應(yīng)的邏輯放入到這些回調(diào)函數(shù)中。需要注意的是,在這些函數(shù)內(nèi)部修改文本框內(nèi)部文字的話,會(huì)再次調(diào)用這些函數(shù),如果不加注意的話就會(huì)造成死循環(huán)而使程序出錯(cuò),這里的解決辦法是把文本的長(zhǎng)度作為文本是否改變的一個(gè)參照物,因?yàn)閷⑽淖痔鎿Q為圖片的話并不會(huì)改變文本框內(nèi)字符串的長(zhǎng)度。TextWatcher接口內(nèi)有三個(gè)函數(shù),分別是:afterTextChanged();beforeTextChanged();onTextChanged();這三個(gè)函數(shù)分別在文字改變之前、文字改變之后和文字改變時(shí)來(lái)執(zhí)行,在我們這個(gè)程序中,我們只需要將我們的代碼加入到任意一個(gè)函數(shù)內(nèi)部,其余兩個(gè)的函數(shù)體為空就可以了。實(shí)現(xiàn)了TextWacther,還需要將其綁定到相應(yīng)的文本輸入框才能發(fā)揮作用:myEditText.addTextChangedListener(this);要根據(jù)type的類型來(lái)設(shè)置button控件的一些相關(guān)屬性。根據(jù)type的類型來(lái)設(shè)置“發(fā)布微博”按鈕內(nèi)部的提示文字:如果當(dāng)前是發(fā)表新微博,就將提示文字設(shè)置為“發(fā)布微博”,如果是轉(zhuǎn)發(fā)微博或評(píng)論微博,就將其設(shè)置為“轉(zhuǎn)發(fā)微博”與“評(píng)論微博”。在該按鈕的監(jiān)聽(tīng)器內(nèi)部,也要根據(jù)不同的type類型來(lái)調(diào)用不同的新浪微博接口。當(dāng)發(fā)布微博完成之后,彈出一個(gè)提示框來(lái)提醒用戶完成了相應(yīng)的操作:Toast.makeText(ActivityUpdateStatus.this,"發(fā)布成功!",Toast.LENGTH_SHORT).show();最后,調(diào)用finish()這個(gè)方法來(lái)結(jié)束Activity的生命周期,使界面回到用戶調(diào)用該Activity之前的的界面。5.2.2選擇圖片上傳在頁(yè)面底端的五個(gè)按鈕中的第二個(gè)的功能是選擇圖片,最終與文本框中的文字一起傳送到新浪微博服務(wù)器,發(fā)送一條有圖片的微博。在相應(yīng)的按鈕監(jiān)聽(tīng)器內(nèi)添加如下代碼:finalCharSequence[]items={"手機(jī)圖片"}; AlertDialog.Builderbuilder=newAlertDialog.Builder( ActivityUpdateStatus.this); builder.setTitle("請(qǐng)選擇"); builder.setItems(items,newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intitem){ Intentintent=newIntent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent,1); } } });AlertDialogalert=builder.create(); alert.show();首先新建一個(gè)AlertDialog.Builder的對(duì)象,并對(duì)他進(jìn)行相應(yīng)的設(shè)置,其中的item是我們之前聲明的字符串?dāng)?shù)組,它決定了最后彈出的對(duì)話框的按鈕的數(shù)量和每個(gè)按鈕上的提示文字,我們這個(gè)數(shù)組僅有一個(gè)元素,所以在后邊添加的點(diǎn)擊監(jiān)聽(tīng)器中就不必判斷是點(diǎn)擊了哪個(gè)按鈕,直接加入所需的代碼就可以了。在監(jiān)聽(tīng)器中,我們用一個(gè)間接的Intent來(lái)向Android系統(tǒng)請(qǐng)求相應(yīng)的Avtivity。在我們之前使用Intent來(lái)啟動(dòng)Activity時(shí),我們都通過(guò)類名準(zhǔn)確告訴系統(tǒng)我們要啟動(dòng)的是哪個(gè)Activity,因?yàn)檫@些Activity都是我們自己寫的,當(dāng)然知道名字。但是如果我們想調(diào)用系統(tǒng)中其他應(yīng)用的Activity,我們無(wú)法知道其準(zhǔn)確的類名,所以就無(wú)法用這種方法來(lái)啟動(dòng)。Android為我們提供了解決方案:如果你希望你的Activity能夠被其它應(yīng)用調(diào)用,那么你在配置文件中可以對(duì)這個(gè)Activity進(jìn)行設(shè)置,告訴系統(tǒng)你這個(gè)Activity可以完成什么樣的工作;工作的類型是通過(guò)Android自定義的一些叫做Action的常量來(lái)決定的,比如瀏覽功能叫做:Intent.VIEW。在確定好功能之后,還要指定打開文件的類型,比如要瀏覽的資源類型是圖片,就需要設(shè)置資源類型為Image/*。在我們這個(gè)例子當(dāng)中,我們希望獲得一張圖片的位置,所以我們?cè)O(shè)置Action的類型為Intent.ACTION_GET_CONTENT。因?yàn)槲覀兿M@得圖片位置,所以我們通過(guò)startActivityForResult(intent,1)這個(gè)方法來(lái)啟動(dòng)Activity,當(dāng)我們調(diào)用的Activity結(jié)束后,會(huì)自動(dòng)執(zhí)行我們Activity的onActivityResult()方法,這樣就會(huì)執(zhí)行相應(yīng)的操作。在這個(gè)方法中,startActivityForResult(intent,1)這個(gè)函數(shù)的第二個(gè)參數(shù)是一個(gè)標(biāo)記,這個(gè)標(biāo)記會(huì)當(dāng)你調(diào)用的Activity結(jié)束是傳入onActivityResult(),這樣在一個(gè)Activity中就可以這樣調(diào)用多個(gè)Activity而不會(huì)發(fā)生混亂。在onActivityResult()中加入如下代碼: try{ Uriuri=data.getData(); ContentResolvercr=this.getContentResolver(); Bitmapbitmap=BitmapFactory.decodeStream(cr .openInputStream(uri)); ByteArrayOutputStream stream=newByteArrayOutputStream(); press(Bitmap.CompressFormat.PNG,100,stream); byte[]byteArray=stream.toByteArray(); image=newImageItem(byteArray); }catch(FileNotFoundExceptione){ Log.e("Exception",e.getMessage(),e); }5.2.3@好友、添加熱點(diǎn)話題和表情在發(fā)布微博界面的最下端的后三個(gè)按鈕的功能分別是:@好友、添加熱點(diǎn)話題和添加表情。在這三個(gè)按鈕的監(jiān)聽(tīng)器的內(nèi)部的工作是一樣的,就是打開一個(gè)Activity。因?yàn)樗鞯墓ぷ饔泻艽蟮墓残?,所以可以在一個(gè)Activity中完成,一些不同的地方可以通過(guò)在Intent中添加額外參宿加以區(qū)別。在監(jiān)聽(tīng)器中加入代碼:Intentintent=newIntent(ActivityUpdateStatus.this, ActivityUpdateStatusListView.class);intent.putExtra("type",2);startActivityForResult(intent,2);在對(duì)應(yīng)的Activity中只有一個(gè)<ListView>控件和一個(gè)<GridView>控件,用來(lái)展示數(shù)據(jù)。通過(guò)檢查“type”的類型為其構(gòu)造不同的適配器。如果是@好友或者是顯示熱點(diǎn)話題,就使用<ListView>,如果是表情,就使用<GridView>:inttype=intent.getIntExtra("type",-1);if(type==2) topic();if(type==3) at();if(type==4) expression();最后運(yùn)行的效果圖如圖5-10,5-11:圖5-10@好友和添加話題界面截圖圖5-11添加表情界面截圖6系統(tǒng)測(cè)試項(xiàng)目測(cè)試是目前保證提高產(chǎn)品質(zhì)量和可靠性的主要手段。測(cè)試階段的目標(biāo)是盡可能多的發(fā)現(xiàn)并排除軟件中潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的產(chǎn)品交付給用戶使用。設(shè)計(jì)測(cè)試用例是測(cè)試階段的關(guān)鍵技術(shù)問(wèn)題,基本目標(biāo)是選用最少量的高效測(cè)試數(shù)據(jù),做到盡可能全面、完善地測(cè)試,從而最大限度地發(fā)現(xiàn)軟件中的問(wèn)題。測(cè)試計(jì)劃、測(cè)試方案和測(cè)試結(jié)果是項(xiàng)目配置的重要成分,他們對(duì)系統(tǒng)的維護(hù)性影響很大,因此必須仔細(xì)記錄和保存。系統(tǒng)測(cè)試用例流程圖如圖6-1所示:圖6-1測(cè)試用例流程圖6.1授權(quán)模塊測(cè)試用例測(cè)試用例測(cè)試結(jié)果帳號(hào)正確、密碼正確成功授權(quán)帳號(hào)正確、密碼錯(cuò)誤密碼輸入有誤,請(qǐng)重新輸入帳號(hào)錯(cuò)誤、密碼正確該帳號(hào)不存在,請(qǐng)重新輸入帳號(hào)錯(cuò)誤、密碼錯(cuò)誤該帳號(hào)不存在,請(qǐng)重新輸入6.2發(fā)表微博測(cè)試用例測(cè)試用例測(cè)試結(jié)果內(nèi)容為空不能發(fā)布空微博內(nèi)容中包含熱點(diǎn)發(fā)布成功內(nèi)容中包含@用戶發(fā)布成功內(nèi)容中添加表情發(fā)布成功內(nèi)容中同時(shí)包含熱點(diǎn)與@用戶發(fā)布成功內(nèi)容中添加多個(gè)表情發(fā)布成功內(nèi)容中同時(shí)包含熱點(diǎn)與表情發(fā)布成功內(nèi)容中同時(shí)包含@用戶與表情發(fā)布成功內(nèi)容中同時(shí)包含熱點(diǎn)、@用戶與表情發(fā)布成功6.3瀏覽微博測(cè)試用例測(cè)試用例測(cè)試結(jié)果瀏覽無(wú)圖片原創(chuàng)微博瀏覽成功瀏覽無(wú)圖片轉(zhuǎn)發(fā)微博瀏覽成功瀏覽有圖片原創(chuàng)微博瀏覽成功瀏覽有圖片原創(chuàng)微博瀏覽成功6.4系統(tǒng)評(píng)價(jià)本系統(tǒng)整體上來(lái)看功能相對(duì)比較完善,并且有友好的人機(jī)界面,方便用戶的操作。但是仍舊存在問(wèn)題和不足,比如數(shù)據(jù)處理速度比較慢,處理大量數(shù)據(jù)的時(shí)候需要用戶等待。另外,由于技術(shù)和時(shí)間的限制,有一些較復(fù)雜的功能未完成。對(duì)于不足的地方,在以后的時(shí)間里我將繼續(xù)彌補(bǔ)和修正。
6總結(jié)信息技術(shù)的快速發(fā)展,將我們每一個(gè)都帶到了一個(gè)被信息包圍的信息時(shí)代。我們每一個(gè)人都無(wú)法置身事外,我們?cè)谙硎苤@個(gè)時(shí)代給我們帶來(lái)的便利,也在尋找著更加快捷方便的獲取信息的方式。微博作為Web2.0時(shí)代的鮮明標(biāo)志,已被人們廣泛接受,但它的作用還遠(yuǎn)遠(yuǎn)沒(méi)有發(fā)揮出來(lái),需要用創(chuàng)新的意識(shí)去完善。在這個(gè)知識(shí)創(chuàng)新就是財(cái)富的時(shí)代,創(chuàng)新就能挖掘出藏在其背后的寶藏。一款個(gè)性化的微博,將會(huì)受到廣大用戶的喜愛(ài)。為解決微博更新效率問(wèn)題,我仔細(xì)研究了現(xiàn)有各大微博的更新機(jī)制,選擇了更加適合一個(gè)中小型微博系統(tǒng)的更新機(jī)制,這對(duì)于服務(wù)器性能的提升產(chǎn)生了積極的作用,給用戶以良好的體驗(yàn)。在完成基本功能的基礎(chǔ)上,盡量完善微博的性能設(shè)計(jì),增加個(gè)性化設(shè)計(jì)。在處理微博現(xiàn)有的看客問(wèn)題上,為微博增加了話桌功能。話桌功能的話題由用戶創(chuàng)造,并且對(duì)于每一個(gè)用戶來(lái)說(shuō)都是平等的,根據(jù)話桌話題可以自由討論,有限的話桌的搶奪,將激發(fā)用戶參與的積極性。從而進(jìn)一步挖掘微博的價(jià)值,當(dāng)用戶的積極性被調(diào)動(dòng)起來(lái)之后,微博的后續(xù)平臺(tái)化發(fā)展將得以進(jìn)行。微博是一個(gè)大的平臺(tái),它包含了許許多多的功能,可以容納更多的個(gè)性化設(shè)計(jì),由于個(gè)人技術(shù)水平及時(shí)間限制,本系統(tǒng)的設(shè)計(jì)著重在于在實(shí)現(xiàn)基本功能的基礎(chǔ)上進(jìn)行個(gè)性化創(chuàng)新,并沒(méi)有照搬現(xiàn)有成功微博的許多功能,很多功能的實(shí)現(xiàn)有待進(jìn)一步的優(yōu)化,而且本系統(tǒng)的實(shí)時(shí)更新與話桌功能只在手機(jī)客戶端加以實(shí)現(xiàn),一則本系統(tǒng)的重點(diǎn)在于基于Android平臺(tái)的微博系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),二則由于個(gè)人精力、技術(shù)、時(shí)間的限制,沒(méi)有在Web端加以實(shí)現(xiàn)。但本系統(tǒng)的設(shè)計(jì)可以容納更多的個(gè)性化設(shè)計(jì),系統(tǒng)結(jié)構(gòu)較為靈活,有利于后續(xù)的開發(fā)與發(fā)展。只有不斷的創(chuàng)新,才能產(chǎn)生無(wú)盡的價(jià)值。
參考文獻(xiàn)[1]MarkoGargenta.LearningAndroid.USA:O’reillyMedia,2011[2]JeffFriesen.LearnJavaforAndro
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版大型酒店集團(tuán)客房布草集中采購(gòu)合作協(xié)議3篇
- 二零二五年度醫(yī)療健康產(chǎn)業(yè)投資合作協(xié)議3篇
- 二零二五版海洋風(fēng)味連鎖加盟店合作協(xié)議3篇
- 二零二五版國(guó)際貿(mào)易結(jié)算付款擔(dān)保協(xié)議書3篇
- 2025年度甲方與乙方共建研發(fā)中心的合作協(xié)議6篇
- 定制衣柜合同協(xié)議書范本
- 無(wú)償車輛租賃協(xié)議
- 汽車庫(kù)租賃協(xié)議
- 工程施工項(xiàng)目合作協(xié)議書(雙方現(xiàn)用)
- 2024承包食堂合同
- 2025年湖北武漢工程大學(xué)招聘6人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 【數(shù) 學(xué)】2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)期末能力提升卷
- GB/T 26846-2024電動(dòng)自行車用電動(dòng)機(jī)和控制器的引出線及接插件
- 陜西省咸陽(yáng)市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- 綠城物業(yè)室內(nèi)公共區(qū)域清潔作業(yè)規(guī)程
- 封條模板A4直接打印版
- 危險(xiǎn)貨物道路運(yùn)輸企業(yè)安全檢查通用清單
- 用友NC財(cái)務(wù)軟件操作手冊(cè)
- 眼內(nèi)炎患者護(hù)理查房
- 電工維修培訓(xùn)資料 維修電工技術(shù)學(xué)習(xí) 維修電工常識(shí) 電工培訓(xùn)ppt課件
- 撲克牌24點(diǎn)練習(xí)題大全
評(píng)論
0/150
提交評(píng)論