Andr移動終端基礎(chǔ)開發(fā) 2_第1頁
Andr移動終端基礎(chǔ)開發(fā) 2_第2頁
Andr移動終端基礎(chǔ)開發(fā) 2_第3頁
Andr移動終端基礎(chǔ)開發(fā) 2_第4頁
Andr移動終端基礎(chǔ)開發(fā) 2_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

移動終端應(yīng)用開發(fā)校園易App數(shù)據(jù)存儲與共享實現(xiàn)ANDROID目錄Contents認(rèn)識Android數(shù)據(jù)存儲創(chuàng)建與操作校園易數(shù)據(jù)庫模塊小結(jié)認(rèn)識ContentProvider數(shù)據(jù)共享教學(xué)目標(biāo)知識目標(biāo)熟悉AndroidSharedPreferences存儲技術(shù)。熟悉Android文件存儲技術(shù)。掌握AndroidSQLite數(shù)據(jù)庫存儲技術(shù)。理解AndroidContentProvider技術(shù)。技能目標(biāo)具備Android文件存儲的能力。具備Android數(shù)據(jù)庫App創(chuàng)建和調(diào)試的能力。素質(zhì)目標(biāo)培養(yǎng)創(chuàng)新思維和創(chuàng)業(yè)精神。培養(yǎng)愛崗敬業(yè)的工作態(tài)度。認(rèn)識Android數(shù)據(jù)存儲01PART數(shù)據(jù)存儲之SharedPreferencesSharedPreferences是Android中的一個輕量級的存儲類,用來保存應(yīng)用程序的一些常用配置,如窗口狀態(tài)(大小、亮度等)。1.SharedPreferences的操作模式SharedPreferences數(shù)據(jù)有以下四種操作模式。①MODE_PRIVATE(默認(rèn)操作模式):表示該文件是私有數(shù)據(jù),只能被應(yīng)用程序本身訪問。在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容。②MODE_APPEND(內(nèi)容追加模式):該模式會檢查文件是否存在,存在則向文件追加內(nèi)容,否則創(chuàng)建新文件。③MODE_WORLD_READABLE(可讀模式):用來控制其他應(yīng)用程序是否有權(quán)限讀取該文件,表示當(dāng)前文件可以被其他應(yīng)用程序讀取。④MODE_WORLD_WRITEABLE(可寫模式):用來控制其他應(yīng)用程序是否有權(quán)限寫該文件,表示當(dāng)前文件可以被其他應(yīng)用程序進行寫操作。出于安全性方面的考慮,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE在Android4.2中已經(jīng)被棄用。數(shù)據(jù)存儲之SharedPreferences2.SharedPreferences的用法SharedPreferences可以用來進行數(shù)據(jù)的共享,包括應(yīng)用程序之間,以及同一個應(yīng)用程序中的不同組件之間。例如,兩個Activity除通過Intent傳遞數(shù)據(jù)之外,還可以通過SharedPreferences共享數(shù)據(jù)。(1)向SharedPreferences存入數(shù)據(jù)的方法先使用Context類提供的getSharedPreferences()方法獲得Preferences對象,再通過edit()方法取得Editor對象,然后通過putXxx()方法添加數(shù)據(jù),最后通過commit()方法提交數(shù)據(jù),從而完成數(shù)據(jù)存儲操作。getSharedPreferences()方法的基本語法格式如下。public

abstract

SharedPreferences

getSharedPreferences(String

name,

int

mode);(2)從SharedPreferences中讀取數(shù)據(jù)的方法從SharedPreferences中讀取數(shù)據(jù)時,主要使用getXxx()方法。從SharedPreferences中取出數(shù)據(jù)的具體代碼如下。SharedPreferencessharedata=getSharedPreferences("data",0);Stringdata=sharedata.getString("item",null);//獲取string類型的數(shù)據(jù)intage=sharedata.getInt("num",10);//獲取int類型的數(shù)據(jù)數(shù)據(jù)存儲之SharedPreferences【案例7-1】實現(xiàn)保存校園易App音樂狀態(tài)的功能。音樂狀態(tài)運行效果數(shù)據(jù)存儲之FilesFiles文件存儲是Android中一種基本的數(shù)據(jù)存儲方式,其不會對存儲的內(nèi)容進行任何格式處理,數(shù)據(jù)都是原封不動地保存在文件中,因而其適用于存儲一些比較簡單的文本或二進制數(shù)據(jù)。Android的文件讀寫有兩種方式,一種是內(nèi)部存儲讀寫,即讀寫默認(rèn)的Java文件流;另一種是外部存儲讀寫,即對SD卡(包括虛擬的內(nèi)置SD卡和外置SD卡)進行讀寫。1.內(nèi)部存儲讀寫內(nèi)置data目錄即內(nèi)部存儲,指的是應(yīng)用程序內(nèi)部獨有的存儲,其存儲的文件、數(shù)據(jù)只能被應(yīng)用程序自身訪問,其他應(yīng)用程序沒有權(quán)限訪問。一般情況下,/data開頭的路徑都是內(nèi)部存儲,而一般應(yīng)用程序所能夠訪問的路徑稱為內(nèi)部私有存儲。內(nèi)部私有存儲如下。/data/data/<包名>/data/data/<包名>/files//存放文件數(shù)據(jù)/data/data/<包名>/databases//存放SQLite的數(shù)據(jù)庫文件/data/data/<包名>/shared_prefs//存放SharedPreferences的數(shù)據(jù)/data/data/<包名>/cache//存放緩存文件數(shù)據(jù)存儲之Files(1)向文件寫入數(shù)據(jù)的方法內(nèi)部存儲的文件讀寫有一套單獨的API,無須聲明特殊權(quán)限。Context類中提供了一個openFileOutput()方法,該方法是Android內(nèi)置的,需要放在Activity中才能執(zhí)行。openFileOutput()方法可以將數(shù)據(jù)存儲到指定的文件中,該方法會接收兩個參數(shù),第一個參數(shù)是文件名,第二個參數(shù)是文件的操作模式。文件的操作模式主要有以下兩種。①MODE_PRIVATE:默認(rèn)操作模式,表示當(dāng)指定文件名時,所寫入的內(nèi)容會覆蓋原有內(nèi)容,且只能被當(dāng)前應(yīng)用程序讀寫。②MODE_APPEND:以追加方式打開該文件,應(yīng)用程序可以向該文件中追加內(nèi)容。例如,向一個名為file_name的文件中寫入數(shù)據(jù),具體代碼如下。FileOutputStreamout=openFileOutput(file_name,MODE_PRIVATE);//打開寫入文件將字節(jié)數(shù)據(jù)寫入文件。out.write(str.getBytes());上述代碼使用write()方法將字節(jié)數(shù)據(jù)寫入文件,調(diào)用getBytes()方法將字符串轉(zhuǎn)換為字節(jié)數(shù)組。最后,調(diào)用close()方法關(guān)閉流。out.close();數(shù)據(jù)存儲之Files(2)從文件中讀取數(shù)據(jù)的方法讀取文件使用FileInputStream對象。例如,從一個名為file_name的文件中讀取數(shù)據(jù),具體代碼如下。FileInputStreamin=openFileInput(file_name);//打開讀取文件上述代碼使用繼承自Context類的openFileInput()方法打開FileInputStream文件流,參數(shù)是文件名字符串,需要自行建立讀取緩存區(qū)的字節(jié)數(shù)組以讀取文件內(nèi)容。byte[]data=newbyte[1024];in.read(data);Stringstr=newString(data);最后,調(diào)用close()方法關(guān)閉流。in.close();數(shù)據(jù)存儲之Files【案例7-2】實現(xiàn)校園易App備忘錄功能。用戶在界面中輸入備忘錄信息,點擊“保存”按鈕可以將備忘錄信息存儲到文件中,點擊“讀取”按鈕可以把備忘錄中的內(nèi)容讀取出來。校園易App備忘錄輸入信息并保存效果校園易App備忘錄讀取效果數(shù)據(jù)存儲之Files2.外部存儲讀寫外部存儲指的是公共的存儲,這部分存儲在理論上是全局可見的,即所有的應(yīng)用程序都可以訪問其中的數(shù)據(jù)。一般情況下,外部存儲的路徑都以/storage開頭,如/storage/emulated/0就屬于外部存儲,該路徑的實際掛載點是/data/media。內(nèi)部存儲一定會存在,而外部存儲可能是SD卡或者通過OTG掛載的U盤,可能出現(xiàn)沒有掛載的情況。因此,對于所有的外部存儲,都要在使用前判斷其是否已被掛載。校園易App備忘錄文件存儲位置數(shù)據(jù)存儲之Files(1)調(diào)用Environment的getExternalStorageState()方法,判斷手機上是否插入了SD卡,且應(yīng)用程序應(yīng)具有讀寫SD卡的權(quán)限。Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);(2)調(diào)用Environment的getExternalStorageDirectory()方法或getExternalStoragePublicDirectory()方法獲取外部存儲,即SD卡的目錄。Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);(3)使用FileInputStream、FileOutputStream、FileReader、FileWriter讀寫SD卡中的文件。FileInputStreamfis=newFileInputStream(SD卡路徑+filename);注意,這里不能使用openFileStream()方法。(4)訪問外部存儲時需在AndroidManifest.xml文件中聲明權(quán)限。為了更規(guī)范地管理手機存儲空間,從Android7.0開始將存儲卡劃分為私有存儲和公共存儲兩大部分,即分區(qū)存儲,系統(tǒng)為每個App都分配了默認(rèn)的私有存儲空間。App在私有存儲空間上讀寫文件時無須授權(quán),但是若想在公共存儲空間上讀寫文件,則要在AndroidManifest.xml文件中添加下述權(quán)限配置信息。android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"android:name="android.permission.READ_EXTERNAL_STORAGE"android:name="android.permission.WRITE_EXTERNAL_STORAGE"android:name="android.permission.MANAGE_EXTERNAL_STORAGE"數(shù)據(jù)存儲之Files【案例7-3】實現(xiàn)校園易App讀寫SD卡中文件的功能。是否允許訪問SD卡的對話框在SD卡中創(chuàng)建文件成功成功向SD卡寫入數(shù)據(jù)創(chuàng)建與操作校園易數(shù)據(jù)庫02PART認(rèn)識SQLite及其使用方法1.SQLite概述SQLite數(shù)據(jù)庫是用C語言編寫的開源嵌入式數(shù)據(jù)庫,支持的數(shù)據(jù)庫大小為2TB,其具有如下特征。(1)輕量級。SQLite和客戶端/服務(wù)器(Client/Server,C/S)模式的數(shù)據(jù)庫軟件不同,其是進程內(nèi)的數(shù)據(jù)庫引擎,因此不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使用SQLite時,一般只需要攜帶其動態(tài)庫就可以使用其全部功能,且動態(tài)庫的尺寸非常小。(2)獨立性。SQLite數(shù)據(jù)庫的核心引擎本身不依賴第三方軟件,使用時也不需要“安裝”,所以在部署時非常方便。(3)隔離性。SQLite數(shù)據(jù)庫中所有的信息(如表、視圖、觸發(fā)器等)都包含在一個文件內(nèi),方便管理和維護。(4)跨平臺。SQLite數(shù)據(jù)庫支持大部分系統(tǒng),如Android、WindowsMobile、Symbian、Palm等。(5)多語言接口。SQLite數(shù)據(jù)庫支持很多語言的編程接口,如C/C++、Java、Python、.NET、Ruby、Perl等,得到很多開發(fā)者的喜愛。(6)安全性。SQLite數(shù)據(jù)庫通過數(shù)據(jù)庫級的獨占性和共享鎖來實現(xiàn)獨立事務(wù)處理。這意味著多個進程可以在同一時間從同一數(shù)據(jù)庫中讀取數(shù)據(jù),但只有一個進程可以寫入數(shù)據(jù)。某個進程或線程向數(shù)據(jù)庫執(zhí)行寫操作之前,必須獲得獨占鎖定。在獲得獨占鎖定后,其他的讀寫操作將不會再發(fā)生。認(rèn)識SQLite及其使用方法2.SQL語句下面介紹SQLite中常用的SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)語句。(1)記錄篩選查詢。sql="select*from數(shù)據(jù)表"http://查詢數(shù)據(jù)表中的所有記錄sql="select*from數(shù)據(jù)表where字段名=字段值orderby字段名[desc]"http://查詢數(shù)據(jù)表中字段值等于指定值的記錄,并按字段名降序排列sql="select*from數(shù)據(jù)表where字段名like'%字段值%'orderby字段名[desc]"http://查詢數(shù)據(jù)表中字段值匹配指定值的記錄,并按字段名降序排列sql="selecttop10*from數(shù)據(jù)表where字段名orderby字段名[desc]"http://查詢數(shù)據(jù)表中指定字段的前10條記錄,并按字段名降序排列sql="select*from數(shù)據(jù)表where字段名in('值1','值2','值3')"http://查詢數(shù)據(jù)表中指定字段的值等于這幾個值的記錄sql="select*from數(shù)據(jù)表where字段名between值1and值2"http://查詢數(shù)據(jù)表中指定字段的值在兩個值之間的記錄認(rèn)識SQLite及其使用方法(2)更新記錄。sql="update數(shù)據(jù)表set字段名=字段值where條件表達式"http://更新數(shù)據(jù)表中滿足條件表達式的字段的對應(yīng)值sql="update數(shù)據(jù)表set字段1=值1,字段2=值2,…,字段n=值nwhere條件表達式"http://更新數(shù)據(jù)表中滿足條件表達式的各個字段的值(3)刪除記錄。sql="deletefrom數(shù)據(jù)表where條件表達式"http://刪除數(shù)據(jù)表中滿足條件表達式的記錄sql="deletefrom數(shù)據(jù)表"http://將數(shù)據(jù)表中的所有記錄刪除(4)添加記錄。sql="insertinto數(shù)據(jù)表(字段1,字段2,字段3,…)values(值1,值2,值3,…)"http://向數(shù)據(jù)表中的字段添加值sql="insertinto目標(biāo)數(shù)據(jù)表select*from源數(shù)據(jù)表"http://把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表中認(rèn)識SQLite及其使用方法(5)記錄統(tǒng)計函數(shù)。AVG(字段名)//得出一個字段的平均值COUNT(*¦字段名)//對記錄行數(shù)的統(tǒng)計或?qū)δ匙侄斡兄档挠涗浶袛?shù)的統(tǒng)計MAX(字段名)//取得一個字段中的最大值MIN(字段名)//取得一個字段中的最小值SUM(字段名)//把字段中的值相加例如,引用SUM()函數(shù)的方法如下。sql="selectsum(字段名)as別名from數(shù)據(jù)表where條件表達式"(6)建立和刪除數(shù)據(jù)表。CREATETABLE數(shù)據(jù)表名稱(字段1類型1(長度),字段2類型2(長度),…)DROPTABLE數(shù)據(jù)表名稱

//永久性刪除一個數(shù)據(jù)表例如,創(chuàng)建一個名為tab01的數(shù)據(jù)表,該表包含name和datetime兩個字段。CREATETABLEtab01(namevarchar(50),datetimedefaultnow())認(rèn)識SQLite及其使用方法3.SQLite常用數(shù)據(jù)類型一般數(shù)據(jù)會采用固定的靜態(tài)數(shù)據(jù)類型,而SQLite采用的是動態(tài)數(shù)據(jù)類型,其會根據(jù)存入值自動判斷數(shù)據(jù)類型。數(shù)據(jù)類型描述NULL該值為空值VARCHAR(n)長度不固定且其最大長度為n的字符串,n不能超過4000CHAR(n)長度固定為n的字符串,n不能超過254INTEGER值被標(biāo)識為整數(shù),依據(jù)值的大小可以依次被存儲為1、2、3、4、5、6、7、8REAL所有值都是浮動的數(shù)值,被存儲為8字節(jié)的IEEE浮動標(biāo)記序號TEXT值為文本字符串,使用數(shù)據(jù)庫編碼(UTF-8、UTF-16BE或UTF-16LE)存儲BLOB值是BLOB數(shù)據(jù)塊,以輸入數(shù)據(jù)的格式進行存儲,即如何輸入就如何存儲,不改變格式DATA包含年份、月份、日期TIME包含小時、分鐘、秒SQLite常用的數(shù)據(jù)類型認(rèn)識SQLite及其使用方法4.SQLiteSpy軟件SQLiteSpy軟件可以幫助用戶快速讀取.sqlite3文件和執(zhí)行SQL語句。SQLiteSpy軟件功能如下。(1)數(shù)據(jù)庫一覽。SQLiteSpy軟件樹狀顯示所有的架構(gòu),包括表、列、索引和觸發(fā)器在數(shù)據(jù)庫中包含的項目。按F5鍵可更新架構(gòu)樹,雙擊表或視圖即可顯示其數(shù)據(jù),右擊可調(diào)用常用命令的上下文菜單。(2)網(wǎng)格單元格編輯。在架構(gòu)樹中選擇表并顯示其數(shù)據(jù),選中目標(biāo)單元格,按F2鍵調(diào)出編輯器,修改數(shù)據(jù)并確認(rèn)修改,即可將更改寫回數(shù)據(jù)庫。(3)數(shù)據(jù)類型顯示。SQLiteSpy軟件將數(shù)據(jù)類型用不同的背景顏色顯示出來,以幫助用戶檢測類型錯誤。類型錯誤(如NULL值與空字符串混淆)可能會導(dǎo)致性能下降或錯誤的SELECT結(jié)果集。(4)完全的Unicode。SQLiteSpy軟件完全支持SQLite的Unicode能力。數(shù)據(jù)顯示和輸入均用Unicode實現(xiàn),包括SQL命令。掌握SQLite常用類及方法SQLite數(shù)據(jù)庫功能非常強大,使用起來也非常方便。Android提供了兩個數(shù)據(jù)庫類來幫助用戶開發(fā)數(shù)據(jù)庫程序,一個是SQLiteOpenHelper數(shù)據(jù)庫幫助類,用于建立數(shù)據(jù)庫和數(shù)據(jù)表;另一個是SQLiteDatabase數(shù)據(jù)庫操作類,用于對數(shù)據(jù)進行增、刪、改、查操作。1.SQLiteOpenHelper數(shù)據(jù)庫幫助類SQLiteOpenHelper是Android提供的一個輔助類,用于管理SQLite數(shù)據(jù)庫的創(chuàng)建和升級。該類中封裝了保證數(shù)據(jù)庫安全的必要方法,包括獲取單例對象、打開數(shù)據(jù)庫、關(guān)閉數(shù)據(jù)庫,并封裝了對記錄進行增加、刪除、修改、查詢的操作方法。SQLiteOpenHelper是一個抽象類,在實際開發(fā)中,為了能夠更好地管理和維護數(shù)據(jù)庫,可以封裝一個繼承SQLiteOpenHelper類的數(shù)據(jù)庫幫助類。其包含以下可使用的方法。(1)getReadableDatabase()。(2)getWritableDatabase()。(3)onCreate(SQLiteDatabasedb)。(4)onOpen(SQLiteDatabasedb)。(5)onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)。掌握SQLite常用類及方法2.SQLiteDatabase數(shù)據(jù)庫操作類SQLiteDatabase是SQLite的數(shù)據(jù)庫管理類,開發(fā)者可以在活動頁面代碼或任何能取到Context的地方獲取數(shù)據(jù)庫實例,并通過SQLiteDatabase提供的一些API對數(shù)據(jù)庫進行操作。(1)openDatabase()和openOrCreateDatabase():打開指定路徑的數(shù)據(jù)庫。(2)deleteDatabase():刪除數(shù)據(jù)庫。(3)close():關(guān)閉數(shù)據(jù)庫。(4)數(shù)據(jù)處理類:用于數(shù)據(jù)表層面的操作。①execSQL():執(zhí)行拼接好的SQL控制語句,一般用于創(chuàng)建數(shù)據(jù)表、刪除數(shù)據(jù)表、變更數(shù)據(jù)表結(jié)構(gòu)。②delete():刪除符合條件的記錄。③update():更新符合條件的記錄。④insert():插入一條記錄。⑤query():執(zhí)行查詢操作,返回結(jié)果集的游標(biāo)。⑥r(nóng)awQuery():執(zhí)行拼接好的SQL查詢語句,返回結(jié)果集的游標(biāo)。掌握SQLite常用類及方法3.ContentValues類ContentValues類負責(zé)存儲一些鍵值對數(shù)據(jù),主要用于向數(shù)據(jù)庫中添加數(shù)據(jù)或更新數(shù)據(jù)。將數(shù)據(jù)插入數(shù)據(jù)庫時,首先要有一個ContentValues對象。例如,向數(shù)據(jù)庫的DB_TABLE數(shù)據(jù)表中插入一條數(shù)據(jù),方法如下。publiclonginsert(Peoplepeople){ContentValuesnewValues=newContentValues();newValues.put(KEY_NAME,people.Name);newValues.put(KEY_AGE,people.Age);newValues.put(KEY_HEIGHT,people.Height);returndb.insert(DB_TABLE,null,newValues);}掌握SQLite常用類及方法4.Cursor接口在Android中,數(shù)據(jù)庫查詢結(jié)果的返回值不是數(shù)據(jù)集合的完整副本,而是數(shù)據(jù)集的指針,即Cursor類。例如,從數(shù)據(jù)庫的DB_TABLE數(shù)據(jù)表中查詢數(shù)據(jù)時需要用到Cursor類,方法如下。publicPeople[]queryAllData(){Cursorresults=db.query(DB_TABLE,newString[]{KEY_ID,KEY_NAME,KEY_AGE,

KEY_HEIGHT},null,null,null,null,null);returnConvertToPeople(results);}創(chuàng)建校園易數(shù)據(jù)庫【案例7-4】創(chuàng)建校園易App數(shù)據(jù)庫。

校園易App數(shù)據(jù)庫創(chuàng)建效果校園易App數(shù)據(jù)庫文件操作校園易數(shù)據(jù)庫【案例7-5】實現(xiàn)校園易App數(shù)據(jù)庫的增、刪、改、查操作。增加和查詢操作效果更改操作效果ContentProvider數(shù)據(jù)共享03PARTContentProvider概述ContentProvider通常使用SQLite數(shù)據(jù)庫、文件、網(wǎng)絡(luò)或其他存儲方式來保存數(shù)據(jù),其他應(yīng)用程序可以通過ContentResolver接口來對這些數(shù)據(jù)進行操作,而不需要關(guān)心數(shù)據(jù)的具體存儲方式。1.ContentProvider介紹ContentProvider內(nèi)部如何保存數(shù)據(jù)由其設(shè)計者決定,但是所有的ContentProvider都實現(xiàn)了一組通用的方法來提供數(shù)據(jù)的增、刪、改、查功能??蛻舳送ǔ2粫苯邮褂眠@些方法,而是通過ContentResolver對象實現(xiàn)對ContentProvider的操作。開發(fā)者可以通過調(diào)用Activity或者其他應(yīng)用程序組件的實現(xiàn)類的getContentResolver()方法獲得ContentProvider對象。ContentResolvercr=newgetContentResolver();2.ContentProvider的主要特點和用途(1)數(shù)據(jù)共享:ContentProvider允許不同應(yīng)用程序之間共享數(shù)據(jù),以實現(xiàn)數(shù)據(jù)交換和共享功能。(2)數(shù)據(jù)查詢:其他應(yīng)用程序可以通過ContentResolver接口向ContentProvider發(fā)起查詢請求,獲取特定數(shù)據(jù)的查詢結(jié)果。(3)數(shù)據(jù)更新:ContentProvider允許其他應(yīng)用程序通過ContentResolver接口對數(shù)據(jù)進行增、刪、改、查操作。(4)權(quán)限控制:ContentProvider可以對數(shù)據(jù)訪問進行權(quán)限控制,限制某些應(yīng)用程序?qū)?shù)據(jù)的訪問權(quán)限。ContentProvider概述3.?dāng)?shù)據(jù)模型ContentProvider使用基于數(shù)據(jù)庫模型的簡單表格來提供其中的數(shù)據(jù),每行代表一條記錄,每列代表具有特定類型和含義的數(shù)據(jù)。4.URI的用法每個ContentProvider提供公共的URI(使用Uri類包裝)來唯一標(biāo)識其數(shù)據(jù)集。管理多個數(shù)據(jù)集(多個表格)的ContentProvider為每個數(shù)據(jù)集都提供了單獨的URI,這些URI以“content://”為前綴,“content:”模式表示數(shù)據(jù)由ContentProvider管理。URI常量用于所有與ContentProvider的交互。每個ContentResolver方法都使用URI作為其第一個參數(shù),其表示ContentResolver應(yīng)該使用哪個ContentProvider及其中的哪個表格。創(chuàng)建ContentProvider程序開發(fā)者可以通過繼承ContentProvider類創(chuàng)建一個新的ContentProvider。這通常需要完成以下操作。(1)繼承ContentProvider類,以提供數(shù)據(jù)訪問方式。(2)聲明ContentProvider,這通常在應(yīng)用程序的AndroidManifest.xml文件中實現(xiàn)。1.繼承ContentProvider類開發(fā)者定義ContentProvider類的子類,以便使用ContentResolver和Cursor類來共享數(shù)據(jù),這意味著需要實現(xiàn)ContentProvider類定義的以下6個抽象方法。方法說明onCreate()初始化ContentProviderquery()返回數(shù)據(jù)給調(diào)用者insert()插入新數(shù)據(jù)到ContentProvider中update()更新ContentProvider中已經(jīng)存在的數(shù)據(jù)delete()從ContentProvider中刪除數(shù)據(jù)getType()返回ContentProvider數(shù)據(jù)的MIME類型創(chuàng)建ContentProvider2.聲明ContentProvider為了讓Android知道開發(fā)者編寫的ContentProvider,應(yīng)該在應(yīng)用程序的AndroidManifest.xml文件中定義<provider>標(biāo)簽。沒有在配置文件中聲明的自定義ContentProvider對Android是不可見的。<provider>標(biāo)簽的n

溫馨提示

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

評論

0/150

提交評論