版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 實習(xí)報告實習(xí)性質(zhì): 畢業(yè)實習(xí) 學(xué)生姓名: xxxxxxx 專業(yè)班級: xxxxxxx 指導(dǎo)教師三號黑體 行 距:固定值40磅:xxxxxxxxxxxxxxxx 實習(xí)時間:2014年2月24日- 2014年5月11日 實習(xí)地點: xxxxxxxxxxxxxxxx有限公司 Xxxxxxxxx大學(xué)學(xué) 生 實 習(xí) 考 核 表學(xué)生姓名專業(yè)班級指 導(dǎo) 教 師Xxxx計算機網(wǎng)絡(luò)xxx三號黑體 行 距:固定值40磅xxxx實習(xí)時間2014年2月24日- 2014年5月11日實習(xí)地點校外實習(xí)名稱畢業(yè)實習(xí)自我總結(jié) 畢業(yè)的磬鐘時時縈繞我的心間,幾年的大學(xué)時光已經(jīng)悄然而逝,馬上就到了畢業(yè)的季節(jié)。曾經(jīng)看著一批批的學(xué)姐
2、學(xué)長們離開校園,感覺那時候的我們離畢業(yè)兩個詞是多么的遙遠(yuǎn)。雖然曾經(jīng)也經(jīng)歷過初中高中的畢業(yè),但這次不同,這次的畢業(yè)代表著我們真正意義上的脫離學(xué)校這個大家庭,開始邁向社會。 如今的我,也以一名畢業(yè)生的身份進(jìn)入了社會工作中,在社會上扮演者android開發(fā)工程師的角色,面對如今這個科技突飛猛進(jìn)的時代,作為以為it開發(fā)者,我在這為期兩學(xué)期的實習(xí)時光里,體會到了許多以前不曾在學(xué)校感受學(xué)到的東西。體會到生活的不易,找工作的艱辛,社會的壓力以及社會生活的復(fù)雜,也教會我如何適應(yīng)這個社會,在不斷失敗和犯錯的教訓(xùn)下成長。指導(dǎo)教師意見實習(xí)單位意見并蓋章(院內(nèi)實習(xí)由系簽署)考核等級信息工程學(xué)院 畢業(yè) 實習(xí)報告 目錄1
3、 實習(xí)目的12 實習(xí)概況12.1 實習(xí)要求12.2 實習(xí)時間22.3 實習(xí)環(huán)境22.4 開發(fā)環(huán)境22.5 開發(fā)前景23 實習(xí)內(nèi)容33.1 需求分析33.2 Android架構(gòu)圖33.3 Android 生命周期53.4軟件下載73.5Android開發(fā)環(huán)境搭建84應(yīng)用程序基礎(chǔ)104.1Android應(yīng)用程序框架104.2 Android應(yīng)用程序組成104.3API參考文檔的使用125通訊錄實例135.1DBHelper主體135.2效果圖265.2.1主界面265.2.2存儲界面(MENU菜單)275.2.3聯(lián)系人界面(MENU菜單)276時鐘286.1 步驟287 實習(xí)總結(jié)32II1 實習(xí)目
4、的畢業(yè)實習(xí)是一個適應(yīng)社會的緩沖期,是加深對自我能力認(rèn)識的重要途徑。大學(xué)的學(xué)習(xí)基本上都是理論的接受,而缺少能力的熟練與加強,我們?nèi)鄙俚牟⒉皇侵R的儲備,而是能力的積蓄。但由于大學(xué)特殊的學(xué)習(xí)模式和環(huán)境,缺少實際情景的見證和實踐活動的參與,同學(xué)之間缺乏必要的交流和比對,使得我們很多時候很難對自身的能力有明晰的認(rèn)識,能力缺陷往往被遮蔽起來。在大學(xué)期間,我們學(xué)習(xí)了很多的知識,但是很多知識局限于基礎(chǔ)知識上,很淺顯的知識,沒有經(jīng)過系統(tǒng)化的學(xué)習(xí)練習(xí),而社會這一大學(xué)校就是教會我們?nèi)绾稳⑽覀冊诖髮W(xué)里面所學(xué)的東西進(jìn)行加深,能得到系統(tǒng)化的學(xué)習(xí)梳理,將學(xué)到的東西實時的運用到社會工作中產(chǎn)生實時的價值,對社會的前進(jìn)和發(fā)展
5、起到推動作用,并在這個過程中發(fā)揮個人才能,創(chuàng)造剩余價值,實現(xiàn)人生價值。成為一名合格的社會人。隨著采用Android系統(tǒng)的谷歌手機、平板電腦等產(chǎn)品逐漸擴大市場占有 率,Android平臺人才的缺口日益顯現(xiàn)。據(jù)業(yè)內(nèi)統(tǒng)計,目前國內(nèi)的3G研發(fā)人才缺口有三、四百萬,其中Android研發(fā)人才缺口至少30萬。職場專家 指出,想要從事Android開發(fā)的人員,除了基礎(chǔ)的計算機技術(shù)知識要扎實之外,要根據(jù)各類企業(yè)、各類崗位的不同需求,補充與崗位相關(guān)的Android技術(shù)知識。但由于大學(xué)特殊的學(xué)習(xí)模式和環(huán)境,缺少實際情景的見證和實踐活動的參與,同學(xué)之間缺乏必要的交流和比對,使得我們很多時候很難對自身的能力有明晰的認(rèn)
6、識,能力缺陷往往被遮蔽起來。Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。據(jù)職酷網(wǎng)數(shù)據(jù)統(tǒng)計顯示:目前熱招的Android技術(shù)相關(guān)崗位約有3882個,而一個月內(nèi)的有效崗位量在2298個。主要熱招職位包括 Android開發(fā)工程師、Android軟件工程師、Android應(yīng)用開發(fā)工程師、系統(tǒng)驅(qū)動工程師,Android手機游戲開發(fā)、Android系統(tǒng) 軟件開發(fā)、 Android程序員、Android游戲應(yīng)用版本管理、人機交互分析工程師、Android中間層開發(fā)工程師等
7、。從人才需求類型來看,目前對Android人才需求一類是偏向硬件驅(qū)動的Android人才需求,一類是偏向軟件應(yīng)用的Android人才需求。從目 前的招聘需求來看,后者的需求最大,包括手機游戲、手機終端應(yīng)用軟件和其他手機應(yīng)用軟件的開發(fā)。據(jù)職酷網(wǎng)職位搜索庫統(tǒng)計顯示,目前企業(yè)對這類應(yīng)用軟件的 Android開發(fā)人才占總需求的72%。應(yīng)用開發(fā)商加大對Android應(yīng)用的開發(fā)力度,因此Android人才的就業(yè)前景也非常廣泛。因此,我希望通過這次的在外實習(xí)更好的把自己塑造成一個滿足社會需求的建設(shè)性人才,同時也用自己的技術(shù)證明“我能行”。2 實習(xí)概況2.1 實習(xí)要求一方面,要求學(xué)生通過畢業(yè)前有針對性的實習(xí)為
8、勝任今后的工作打下基礎(chǔ);另一方面,要求學(xué)生通過實習(xí)了解社會,了解企業(yè),培養(yǎng)學(xué)生主動適應(yīng)社會上的各種崗位需要的素質(zhì)和能力。2.2 實習(xí)時間2014年2月24日- 2014年5月11日2.3 實習(xí)環(huán)境(1)實習(xí)單位:xxxxxxx有限公司(2)簡介:xxxxxxx有限公司是一家致力于為我市廣大小微企業(yè)服務(wù) 的電子商務(wù)高科技企業(yè),借助本公司的移動電子商務(wù)平臺,為小微企業(yè)提供包括營銷推廣、投資融資、管理培訓(xùn)、財務(wù)咨詢及企業(yè)信息化等服務(wù)。(3)所在部門:軟件開發(fā)部(4)主要工作:android手機客戶端的設(shè)計、編碼以及測試和后期的維護、更新、升級等工作。2.4 開發(fā)環(huán)境l 操作系統(tǒng)(Windows7)l
9、 開發(fā)工具(Eclipse)l 客戶瀏覽器(IE)l 開發(fā)語言(Java)2.5 開發(fā)前景市場上:現(xiàn)在2.2技術(shù)應(yīng)該已經(jīng)成型了,但是目前產(chǎn)品是2.2的貌似不是很多,在嵌入式的角度來說,前景應(yīng)該不錯,手機領(lǐng)域就不用說了,汽車導(dǎo)航,電子消耗品,它的界面我認(rèn)為遠(yuǎn)比塞班和wince要好吧,而且,開放軟件是個趨勢,這樣,系統(tǒng)的市場占有率才能高,支持的軟件多,自然生命周期,效益比率上都高。技術(shù)上:現(xiàn)在國內(nèi)Android的軟件的開發(fā)人員應(yīng)該也不少了,而且基于linux內(nèi)核,linux內(nèi)核也是趨勢,現(xiàn)在Android封裝linux那部分的類和函數(shù)感覺懂的人相對也不是很多。在挑戰(zhàn)性和技術(shù)掌握上,Android都
10、是優(yōu)勢。支持上:國內(nèi)對google的態(tài)度.有的時候服務(wù)器上不去,可能一點開發(fā)中平臺的小問題,就是人家一句話就解決的問題,可能要耽誤開發(fā)周期,或者說,影響開發(fā)心情.所以整體來說Android的前景還是很好的。3 實習(xí)內(nèi)容基于Android的手機通訊錄的開發(fā)。 SDK、JDK的界面以及使用 Eclipse軟件的使用 Android編程方法 Activities的生命周期 基于Android的數(shù)據(jù)庫創(chuàng)建與連接 手機通訊錄中存儲數(shù)據(jù)的導(dǎo)入導(dǎo)出3.1 需求分析 隨著手機市場的飛速發(fā)展,手機已成為我們生活必不可少的一部分,無論是在吃飯、走路還是在公交車上,我們總是看見形形色色的人群拿著五花八門的手機,或打
11、電話,或聊天等等。而近幾年來,突如其來的android手機浪潮以迅雷不急掩耳之勢迅速占據(jù)手機市場。面對android手機市場龐大的需求,我毅然決定步入android開發(fā)行業(yè)。通過這一學(xué)期對android的初步了解,我用已有的知識寫了一個小的程序系統(tǒng)以及一些了解的基本知識。主要設(shè)計到手機通訊方面的數(shù)據(jù)的導(dǎo)入導(dǎo)出,添加、刪除以及一個小時鐘問題。3.2 Android架構(gòu)圖 Android系統(tǒng)架構(gòu)和一些普遍的操作系統(tǒng)差不多,都是采用了分層的架構(gòu),從他們之間的架構(gòu)圖看,Android系統(tǒng)架構(gòu)分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和linux核心層。1.應(yīng)用程序 Andr
12、oid 會同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括 email客戶端,SMS 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA 語言編寫的。2.應(yīng)用程序框架 開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計簡化了組件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機制也使用戶可以方便的替換程序組件。 隱藏在每個應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;豐富而又可擴展的視圖(Views),可以用來構(gòu)建應(yīng)用程序, 它包括列表(lists)
13、,網(wǎng)格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web 瀏覽器。內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫), 或者共享它們自己的數(shù)據(jù)資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息?;顒庸芾砥鳎?Activity Manager) 用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。 3.程序庫 And
14、roid 包含一些C/C+庫,這些庫能被 Android 系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫: 系統(tǒng) C 庫 - 一個從 BSD 繼承來的標(biāo)準(zhǔn) C 系統(tǒng)函數(shù)庫( libc ), 它是專門為基于embedded linux 的設(shè)備定制的。 媒體庫 - 基于 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。Surface Manager - 對顯示子系統(tǒng)的管理,并且為多個應(yīng)用程序提 供了2D
15、 和 3D 圖層的無縫融合。LibWebCore - 一個最新的web 瀏覽器引擎用,支持Android 瀏覽器和一個可嵌入的web 視圖。SGL - 底層的 2D 圖形引擎3D libraries - 基于 OpenGL ES 1.0 APIs 實現(xiàn);該庫可以使用硬件 3D加速(如果用)或者使用高度優(yōu)化的3D 軟加速。FreeType -位圖(bitmap)和矢量(vector)字體顯示。SQLite 一個對于所有應(yīng)用程序可用,功能強勁的輕型關(guān)系型數(shù)據(jù)庫引擎。 3.3 Android 生命周期在 Android 中,多數(shù)情況下每個程序都是在各自獨立的 Linux 進(jìn)程中運行的。當(dāng)一個程序或其
16、某些部分被請求時,它的進(jìn)程就“出生”了;當(dāng)這個程序沒有必要再運行下去且系統(tǒng)需要回收這個進(jìn)程的內(nèi)存用于其他程序時,這個進(jìn)程就接控制。這和我們編寫桌面應(yīng)用程序時的思維有一些不同,一個桌面應(yīng)用程序的進(jìn)程也是在其他進(jìn)程或用戶請求時被創(chuàng) 建,但是往往是在程序自身收到關(guān)閉請求后執(zhí)行一個特定的動作(比如從 main 函數(shù)中 return)而導(dǎo)致進(jìn)程結(jié)束的。要想做好某種類型的程序或者某種平臺下的程序的開發(fā),最關(guān)鍵的就是要弄清楚這種類型的程序或整個平臺下的程序的一般工作 模式并熟記在心。在 Android 中,程序的生命周期控制就是屬于這個范疇我的個人理解。 在 Android 系統(tǒng)中,當(dāng)某個 activity
17、調(diào)用 startActivity(myIntent) 時,系統(tǒng)會在所有已經(jīng)安裝的程序中尋找其 intent filter 和 myIntent 最匹配的一個 activity,啟動這個進(jìn)程,并把這個 intent 通知給這個 activity。這就是一個程序的“生”。比如我們在 Home application 中選擇 “Web browser”,系統(tǒng)會根據(jù)這個 intent 找到并啟動 Web browser 程序,顯示 Web browser 的一個 activity 供我們?yōu)g覽網(wǎng)頁(這個啟動過程有點類似我們在在個人電腦上雙擊桌面上的一個圖標(biāo),啟動某個應(yīng)用程序)。在 Android 中,所
18、有的應(yīng)用程序“生來就是平等的”,所以不光 Android 的核心程序甚至第三方程序也可以發(fā)出一個 intent 來啟動另外一個程序中的一個 activity。Android 的這種設(shè)計非常有利于“程序部件”的重用。 一個 Android 程序的進(jìn)程是何時被系統(tǒng)結(jié)束的呢?通俗地說,一個即將被系統(tǒng)關(guān)閉的程序是系統(tǒng)在內(nèi)存不足(low memory)時,根據(jù)“重要性層次”選出來的“犧牲品”。一個進(jìn)程的重要性是根據(jù)其中運行的部件和部件的狀態(tài)決定的。各種進(jìn)程按照重要性從高到低排列如 下: 1. 前臺進(jìn)程。這樣的進(jìn)程擁有一個在屏幕上顯示并和用戶交互的 activity 或者它的一個IntentReciver
19、 正在運行。這樣的程序重要性最高,只有在系統(tǒng)內(nèi)存非常低,萬不得已時才會被結(jié)束。 2. 可見進(jìn)程。在屏幕上顯示,但是不在前臺的程序。比如一個前臺進(jìn)程以對話框的形式顯示在該進(jìn)程前面。這樣的進(jìn)程也很重要,它們只有在系統(tǒng)沒有足夠內(nèi)存運行所有前臺進(jìn)程時,才會被結(jié)束。 3. 服務(wù)進(jìn)程。這樣的進(jìn)程在后臺持續(xù)運行,比如后臺音樂播放、后臺數(shù)據(jù)上傳下載等。這樣的進(jìn)程對用戶來說一般很有用,所以只有當(dāng)系統(tǒng)沒有足夠內(nèi)存來維持所有的前臺和可見進(jìn)程時,才會被結(jié)束。 4. 后臺進(jìn)程。這樣的程序擁有一個用戶不可見的 activity。這樣的程序在系統(tǒng)內(nèi)存不足時,按照 LRU 的順序被結(jié)束。 5. 空進(jìn)程。這樣的進(jìn)程不包含任何活
20、動的程序部件。系統(tǒng)可能隨時關(guān)閉這類進(jìn)程。 3.4軟件下載Android SDK,網(wǎng)址是 .JDK6的下載地址 。Eclipse的下載網(wǎng)址是 /downloads/ 3.5Android開發(fā)環(huán)境搭建第一步:下載Android SDK到官方下載Android SDK,網(wǎng)址是 ./sdk/index.html 。 Android 1.5之前Google提供了Android SDK開發(fā)的完整下載,在Android 1.6之后Google只提供了安裝工具在線安裝。 單擊“android-sdk-windows.zip”鏈接進(jìn)行SDK下載,下載該文件后解
21、壓該文件到操作系統(tǒng)的任意目錄下。打開目錄找到SDK Setup.exe可執(zhí)行文件,雙擊執(zhí)行該文件。 選擇"Available Packages",選擇想安裝的版本(我是全選了,省事),然后單擊“Install Selected”->選擇“Accept All”,再單擊“Install Accepted”就可以在線安裝了。 提示:如果你的“Available Packages”右側(cè)的地址不能打開,請選擇左側(cè)列表的“Setting”選項,在右側(cè)的設(shè)置中勾選“Fore https:/.”第二步:安裝JDKA下載JDK。Android SDK需要JDK5
22、以上的版本。JDK6的下載地址 。 B安裝JDK。下載完成后進(jìn)行正常雙擊、安裝,這里就不說了。 C配置Java環(huán)境變量 1配置Java Home。復(fù)制Java的安裝路徑,右鍵單擊“我的電腦”->“屬性”->“高級”>“環(huán)境變量”中新建環(huán)境變量java_home,變量值為java安裝路徑。 2配置Path。右鍵單擊“我的電腦”->“屬性”->“高級”>“環(huán)境變量”,在“系統(tǒng)環(huán)境變量”中編輯Path便來了個,添加Java的bin目錄到其中。變量與變量中間使用分號“;”分隔。 3配置classpath。
23、右鍵單擊“我的電腦”->“屬性”->“高級”>“環(huán)境變量”,在“系統(tǒng)環(huán)境變量”中新建一個系統(tǒng)變量名稱為“classpath”,變量值為半角句號“.”如下圖:第三步:下載EclipseADT插件要求Eclipse的版本是3.3以上,Eclipse的下載網(wǎng)址是 /downloads/ 。下載后解壓可以直接使用。下載安裝ADT。這里介紹通過Eclipse在線更新的方式安裝。1啟動Eclipse,選擇“Help”->“Install New Software.”2單擊“Add.”添加一個更新站點(注意:站點http后面不要加s)否則可能
24、連接失敗。(Name:ADT 0.9.5;Location: http:/dl- )3添加好后,勾選“Developer Tools”單擊“Next”進(jìn)行更新安裝。4應(yīng)用程序基礎(chǔ)4.1Android應(yīng)用程序框架 4.1.1 程序框架4.2 Android應(yīng)用程序組成一般的android應(yīng)用程序由4部分組成分別是:ActivityBroadcast Intent ReceiverServiceContent Provider 并不是說所有的應(yīng)用程序都是由這四個部分組成,有的簡單的應(yīng)用只需要Activity就可以了,有的只需要Broadcast Intent Receiver就可以了。 在andr
25、oid項目里邊有個AndroidManifest.xml文件,這個文件非常重重要,就和A中的web.config文件一樣,應(yīng)用中要用到的組件都要首先在這個文件中進(jìn)行描述聲明后才可以正常使用,否則程序中用到了上述的組件了,也不會起作用。一、Activity 組件 Activity是開發(fā)android應(yīng)用的過程中使用的最頻繁的組件,它是android的最基本的組件之一。在android程序中Activity代表了手機的一個屏幕,好比A應(yīng)用中的一個網(wǎng)頁,一個android應(yīng)用相當(dāng)于一個web站點。在Activity中我們可以添加View,并且對View做一些操作,View可以理解為一個UI容器,在這
26、個容器中可以添加很多UI 元素,比如:Button,TextView,EditView,List等,這些豐富的UI元素組成了和用戶交互的時的豐富的用戶界面,Activity控制著View中各個元素的邏輯處理和導(dǎo)航,比如Activity1跳轉(zhuǎn)到Activity2,當(dāng)然也可以在Activity2關(guān)閉的時候返回一個值給Activity1這個和A中彈出一個對話框,當(dāng)關(guān)閉對話框時返回一個值給原頁面是一樣的,這樣在開發(fā)中解決很多問題是非常方便的。 Android的導(dǎo)航是由一個stack控制,當(dāng)打開一個新的屏幕時原來的屏幕會被置為暫停狀態(tài),并且壓入歷史堆棧,用戶可以通過返回操作來彈出棧頂?shù)钠聊徊⒃O(shè)置為當(dāng)前操
27、作的屏幕界面。android會把每個應(yīng)用從開始到當(dāng)前的每一個屏幕的頁面都壓入到堆棧中,在開發(fā)過程中可以有選擇的移除一些堆棧中不會用到的界面。Activity是由android系統(tǒng)進(jìn)行維護的,它有自己的生命周期。二、Broadcast Intent Receiver組件 可以使用BroadcastReceiver來讓應(yīng)用對一個外部的事件作出響應(yīng),因此利用這個組件可以做一些很有意思的事情,我之前寫的一篇Android中發(fā)送和接收短信就是用BroadcastReceiver組件來實現(xiàn)的。當(dāng)電話和短信這個外部事件發(fā)生時就可以利用BroadcastReceiver組件來進(jìn)行處理。BroadcastRec
28、eiver不能直接生成與用戶交互的界面,因為界面是由Activity負(fù)責(zé)的,換句話說對用戶來說是不透明的,用戶看不到它,這個和Windows Service 類似,但是BroadccastReceiver可以通過NotificationManager來通知用戶發(fā)生了什么事情,也可以使用Toast來通知用戶。要使用BroadcastReceiver組件,首先要在AndroidManifest.xml中進(jìn)行注冊或者在代碼中使用Context.registerReceiver()進(jìn)行注冊,只要注冊了,當(dāng)事件發(fā)生了,即使應(yīng)用沒有啟動,android也會自動啟動應(yīng)用,來響應(yīng)發(fā)生的事件。三、Service
29、組件 Service是一種程序,它可以運行很長時間,但它和BroadcastReceiver組件一樣也沒有界面,這些服務(wù)可以提供系統(tǒng)的某些能力,來供調(diào)用,它更像是一組API。例如播放音樂的Sevice,它可以控制音樂的播放,停止。通過startService(Intent service)可以啟動一個service,可以通過Context.BindService()綁定一個Service。四、Content Provider組件 數(shù)據(jù)在android中是私有的不能進(jìn)行共享,這些數(shù)據(jù)包括文件和數(shù)據(jù)庫,但是如果一個應(yīng)用要使用另一個應(yīng)用的數(shù)據(jù)在怎么做呢?那么這個時候Content Provider就
30、派上用場了,一個Content Provider定義了一組標(biāo)準(zhǔn)的方法的接口,能使其它應(yīng)用保存和讀取此Content Privider的各種數(shù)據(jù),那么怎么來實現(xiàn)呢?那就是通過去實現(xiàn)Contnent Privider的接口就可以了,Content Privider已經(jīng)實現(xiàn)了數(shù)據(jù)的封裝和處理,外界是看不到數(shù)據(jù)的具體存儲細(xì)節(jié),只需要通過這些標(biāo)準(zhǔn)的接口打交道就可以了,可以讀取數(shù)據(jù),刪除數(shù)據(jù),插入數(shù)據(jù)等等操作。例如android的基本應(yīng)用Contects就就通過這種方式共享通訊錄數(shù)據(jù)的,其它應(yīng)用可以通過Content Provider組件操作通訊錄中的數(shù)據(jù)。 圖4.2.1 android應(yīng)用包生成過程4.
31、3API參考文檔的使用包(Package)的索引 Interfaces Classes Enums Exceptions類(Class)的索引 擴展和實現(xiàn)內(nèi)容 按包名的繼承關(guān)系(可用于反找包) Overview(概覽) XML Attributes(XML的屬性) Constants(常量) Constructors(構(gòu)造函數(shù)) Methods(方法)5通訊錄實例5.1DBHelper主體public class DBHelper public static final String DB_DBNAME="contact"public static final String
32、 DB_TABLENAME="user"public static final int VERSION = 4;public static SQLiteDatabase dbInstance; private MyDBHelper myDBHelper;private StringBuffer tableCreate;private Context context;public DBHelper(Context context) this.context = context;public void openDatabase() if(dbInstance = null) m
33、yDBHelper = new MyDBHelper(context,DB_DBNAME,VERSION);dbInstance = myDBHelper.getWritableDatabase();/* * 往數(shù)據(jù)庫里面的user表插入一條數(shù)據(jù),若失敗返回-1 * param user * return 失敗返回-1 *public long insert(User user) ContentValues values = new ContentValues();values.put("name", user.username);values.put("mobi
34、lephone", user.mobilePhonevalues.put("officephone", user.officePhone);values.put("familyphone", user.familyPhone);values.put("address", user.address);values.put("othercontact", user.otherContact);values.put("email",user.email);values.put("p
35、osition", user.position);values.put("company", pany);values.put("zipcode", user.zipCode);values.put("remark", user.remark);values.put("imageid", user.imageId);values.put("privacy", user.privacy);return dbInstance.insert(DB_TABLENAME, null, value
36、s);/* 獲得數(shù)據(jù)庫中所有的用戶,將每一個用戶放到一個map中去,然后再將map放到list里面去返回 * param privacy * return list */public ArrayList getAllUser(boolean privacy) ArrayList list = new ArrayList();Cursor cursor = null;if(privacy) cursor = dbInstance.query(DB_TABLENAME, new * 獲得數(shù)據(jù)庫中所有的用戶,將每一個用戶放到一個map中去,然后再將map放到list里面去返回 * param pri
37、vacy * return list */public ArrayList getAllUser(boolean privacy) ArrayList list = new ArrayList();Cursor cursor = null;if(privacy) cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilephone","officephone","familyphone","address
38、","othercontact","email","position","company","zipcode","remark","imageid", "privacy=1", null, null, null, null); else cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilep
39、hone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid", "privacy=0",null, null, null, null); while(cursor.moveToNext() Hash
40、Map item = new HashMap();item.put("_id", cursor.getInt(cursor.getColumnIndex("_id");item.put("name", cursor.getString(cursor.getColumnIndex("name");item.put("mobilephone", cursor.getString(cursor.getColumnIndex("mobilephone");item.put("
41、;officephone", cursor.getString(cursor.getColumnIndex("officephone");item.put("familyphone", cursor.getString(cursor.getColumnIndex("familyphone");item.put("address", cursor.getString(cursor.getColumnIndex("address");item.put("othercontact&
42、quot;, cursor.getString(cursor.getColumnIndex("othercontact");item.put("email", cursor.getString(cursor.getColumnIndex("email");item.put("position", cursor.getString(cursor.getColumnIndex("position");item.put("company", cursor.getString(cur
43、sor.getColumnIndex("company");item.put("zipcode", cursor.getString(cursor.getColumnIndex("zipcode");item.put("remark", cursor.getString(cursor.getColumnIndex("remark");item.put("imageid", cursor.getInt(cursor.getColumnIndex("imageid&qu
44、ot;);list.add(item);return list;public void modify(User user) ContentValues values = new ContentValues();values.put("name", user.username);values.put("mobilephone", user.mobilePhone);values.put("officephone", user.officePhone);values.put("familyphone", user.fa
45、milyPhone);values.put("address", user.address);values.put("othercontact", user.otherContact);values.put("email",user.email);values.put("position", user.position);values.put("company", pany);values.put("zipcode", user.zipCode);values.put(&qu
46、ot;remark", user.remark);values.put("imageid", user.imageId);dbInstance.update(DB_TABLENAME,values,"_id=?",new StringString.valueOf(user._id);public void delete(int _id) dbInstance.delete(DB_TABLENAME, "_id=?", new StringString.valueOf(_id);public void deleteAll(in
47、t privacy) dbInstance.delete(DB_TABLENAME,"privacy=?",new StringString.valueOf(privacy);public int getTotalCount() Cursor cursor = dbInstance.query(DB_TABLENAME, new String"count(*)", null, null, null, null, null);cursor.moveToNext();return cursor.getInt(0);public ArrayList getUs
48、ers(String condition, boolean privacy) ArrayList list = new ArrayList();String strSelection = ""if(privacy) strSelection = "and privacy = 1" else strSelection = "and privacy = 0"String sql = "select * from " + DB_TABLENAME + " where 1=1 and (name like
49、9;%" + condition + "%' " +"or mobilephone like '%" + condition + "%' or familyphone like '%" + condition + "%' " +"or officephone like '%" + condition + "%')" + strSelection;Cursor cursor = dbInstance.rawQue
50、ry(sql, null);while(cursor.moveToNext() HashMap item = new HashMap();item.put("_id", cursor.getInt(cursor.getColumnIndex("_id");item.put("name", cursor.getString(cursor.getColumnIndex("name");item.put("mobilephone", cursor.getString(cursor.getColumnI
51、ndex("mobilephone");item.put("officephone", cursor.getString(cursor.getColumnIndex("officephone");item.put("familyphone", cursor.getString(cursor.getColumnIndex("familyphone");item.put("address", cursor.getString(cursor.getColumnIndex("
52、;address");item.put("othercontact", cursor.getString(cursor.getColumnIndex("othercontact");item.put("email", cursor.getString(cursor.getColumnIndex("email");item.put("position", cursor.getString(cursor.getColumnIndex("position");item.p
53、ut("company", cursor.getString(cursor.getColumnIndex("company");item.put("zipcode", cursor.getString(cursor.getColumnIndex("zipcode");item.put("remark", cursor.getString(cursor.getColumnIndex("remark");item.put("imageid", cursor.g
54、etInt(cursor.getColumnIndex("imageid");list.add(item);return list;class MyDBHelper extends SQLiteOpenHelper public MyDBHelper(Context context, String name,int version) super(context, name, null, version);Overridepublic void onCreate(SQLiteDatabase db) tableCreate = new StringBuffer();table
55、Create.append("create table ") .append(DB_TABLENAME) .append(" (") .append("_id integer primary key autoincrement,") .append("name text,") .append("mobilephone text,") .append("officephone text,") .append("familyphone text,") .app
56、end("address text,") .append("othercontact text,") .append("email text,") .append("position text,") .append("company text,") .append("zipcode text,") .append("remark text,") .append("imageid int,") .append("privacy
57、int ") .append(")");System.out.println(tableCreate.toString();db.execSQL(tableCreate.toString();Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) String sql = "drop table if exists " + DB_TABLENAME;db.execSQL(sql);myDBHelper.onCreate(db);5.1.2Main函數(shù)主體package com.zhengping.contact;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;impor
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教科版四年級下冊科學(xué)科學(xué)教案+教材分析
- 2018年Q1中國移動互聯(lián)網(wǎng)行業(yè)發(fā)展分析報告
- 能源有限公司企業(yè)標(biāo)準(zhǔn):基本建設(shè)管理標(biāo)準(zhǔn)
- 修繕協(xié)議書(2篇)
- 公共關(guān)系咨詢合同(2篇)
- 酒店租賃協(xié)議
- 房屋場地租賃合同書模板
- 博覽會總贊助協(xié)議書
- 土方車租賃合同
- 2025年金屬壓力及大型容器合作協(xié)議書
- GB/T 16823.3-2010緊固件扭矩-夾緊力試驗
- GB/T 1446-2005纖維增強塑料性能試驗方法總則
- 透水混凝土工程檢驗批質(zhì)量驗收記錄表
- 2023年中荊投資控股集團有限公司招聘筆試模擬試題及答案解析
- DPP-4抑制劑的臨床應(yīng)用及優(yōu)勢解析課件
- 《起重吊裝方案編制》課件
- 光伏扶貧項目可行性研究報告
- 鈑金沖壓件質(zhì)量要求
- 2022年高考全國甲卷語文試題評講課件55張
- 欠條(標(biāo)準(zhǔn)模版)
- 深圳京基·KKmall市場考察報告(45頁
評論
0/150
提交評論