Android應(yīng)用程序開發(fā)技術(shù) 課件 第6章 數(shù)據(jù)存儲_第1頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6章 數(shù)據(jù)存儲_第2頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6章 數(shù)據(jù)存儲_第3頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6章 數(shù)據(jù)存儲_第4頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6章 數(shù)據(jù)存儲_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章數(shù)據(jù)存儲Android應(yīng)用程序開發(fā)技術(shù)

Android中有三種存儲方式,分別是文件存儲、SharedPreferences存儲和數(shù)據(jù)庫存儲。文件存儲主要用于存儲資源文件如日記等。SharedPreferences存儲主要用于程序中的少量數(shù)據(jù)存儲,例如應(yīng)用程序的登錄界面中的用戶名和密碼等數(shù)據(jù)。數(shù)據(jù)庫存儲主要用于程序中有大量的數(shù)據(jù)需要存儲,在Android中內(nèi)置了SQLite數(shù)據(jù)庫。第六章數(shù)據(jù)存儲

6.1文件存儲 6.2SharedPreferences存儲 6.3SQLite數(shù)據(jù)庫存儲內(nèi)容安排6.1文件存儲

基于文件流的讀取與寫入是Android平臺上的數(shù)據(jù)存取方式之一。如果使用Java語言開發(fā)Android程序就可以將Java提供一整套完整的IO流操作應(yīng)用于程序開發(fā)。如FileInputStream、FileOutputStream等。Android同樣支持以流的方式來訪問手機(jī)存儲器上的文件。6.1.1使用IO流操作文件的常用方法

可以通過Android包中提供的Contex對象的如下方法:openFileInput和openFileOutput來分別獲取FileInputStream和FileOutputStream。 1.FileInputStreamopenFileInput(Stringname)

打開應(yīng)用程序私有目錄下由參數(shù)fileName指定的私有文件以讀入數(shù)據(jù),返回一個FileInputStream對象。參數(shù)mode的含義如表所示。常量含義MODE_PRIVATE默認(rèn)模式,表示該文件是私有數(shù)據(jù)文件,只能被應(yīng)用自身訪問,寫入內(nèi)容會覆蓋原文件內(nèi)容。MODE_APPEND

改模式會檢查文件是否存在,如果文件已存在就向該文件的末尾繼續(xù)寫入數(shù)據(jù),否則創(chuàng)建文件。MODE_WORLD_READABLE所有的應(yīng)用程序?qū)υ撐募哂凶x的權(quán)限。(出于安全不建議使用)MODE_WORLD_WRITEABLE

所有的應(yīng)用程序?qū)υ撐募哂袑懙臋?quán)限。(出于安全不建議使用)6.1.1使用IO流操作文件的常用方法【例6-1】利用本地文件存儲和加載記事本信息,運(yùn)行效果如圖所示。屏幕下方的“保存”按鈕可以將輸入的信息存儲到本地文件“note.txt”中,“加載”按鈕可以將之前保存到文件的信息加載到文本框中顯示。6.1.2文件操作舉例

6.1文件存儲

6.2SharedPreferences存儲 6.3SQLite數(shù)據(jù)庫存儲內(nèi)容安排6.2SharedPreferences存儲

在應(yīng)用程序中通常會有保存用戶使用偏好設(shè)置的需求。對于這類信息在Android中通常采用一個輕量級的文件存儲類—SharedPreferences將信息保存在本機(jī)的應(yīng)用程序包名\shared_prefs目錄下的特定文件中。SharedPreferences是用xml文件存放數(shù)據(jù)。文件存放在/data/data/<packagename>/shared_prefs目錄下,使用鍵-值對(Key-Value)形式來存儲數(shù)據(jù)。6.2.1SharedPreferences接口

SharedPreferences是android.content包提供的接口,常用方法如表所示。方法名功能說明boolean contains(Stringkey)檢查是否包含指定key的數(shù)據(jù)SharedPreferences.Editoredit()返回SharedPreferences.Editor編輯對象Map<String,?> getAll()獲取SharedPreferences.Editor中所有key-value對,返回類型為Mapboolean getXxx(Stringkey,XxxdefValue)返回SharedPreferences中指定key的數(shù)據(jù),如果key不存在,則返回默認(rèn)值defValue,Xxx是數(shù)據(jù)類型,支持boolean、float、int、long、String和StringSet6.2.1SharedPreferences接口SharedPreferences.Editor提供的常用方法如表所示。方法名功能說明SharedPreferences.Editor clear()清空SharedPreferences中的所有數(shù)據(jù)SharedPreferences.Editorremove(Stringkey)刪除SharedPreferences中key指定的數(shù)據(jù)SharedPreferences.EditorputXxx(Stringkey,Xxxvalue)將指定key的數(shù)據(jù)保存到SharedPreferences對象中,Xxx是數(shù)據(jù)類型,支持boolean、float、int、long、String和StringSetboolean commit()Editor數(shù)據(jù)寫入完成后使用該方法將數(shù)據(jù)直接存儲到文件中去,如果成功返回true,否則返回false。voidapply()與commit()方法類似,差別是沒有返回值,且只實(shí)時更新SharedPreferences內(nèi)存中的數(shù)據(jù),對SharedPreferences文件的更新是異步的。6.2.2SharedPreferences操作步驟1.數(shù)據(jù)保存的步驟獲得SharedPreferences對象。SharePreferences本身是一個接口,不能直接實(shí)例化,可以通過Context環(huán)境上下文對象提供的getSharedPreferences()方法來獲取SharePreferences對象實(shí)例。2.數(shù)據(jù)讀取的步驟獲得SharedPreferences對象;通過SharedPreferences對象的getXXX方法獲取數(shù)據(jù)。6.2.3SharedPreferences應(yīng)用舉例【例6-2】利用SharedPreferences存儲APP登錄頁面的賬號和密碼。運(yùn)行效果如圖所示。用戶單擊“登錄”按鈕后,如果用戶勾選了“記住密碼”復(fù)選框,就將本次用戶輸入的賬戶和密碼鍵值對存儲到本機(jī)的SharedPreferences文件中,下次用戶登錄時就直接顯示存儲的賬號和密碼信息。6.2.3SharedPreferences應(yīng)用舉例1.新建工程

新建工程名為xsyu.jsj.samp_sharedprefs的空白工程。工程中包含兩個布局文件和兩個Activity文件,分別對應(yīng)登錄頁面(activity_login.xml和LoginActivity.java)和登錄后的主頁面(activity_main.xml和MainActivity.java)。2.實(shí)現(xiàn)登錄頁面的布局文件登錄頁面布局如圖所示,包含兩個TextView、兩個EditView、一個CheckBox和一個Button組件。6.2.3SharedPreferences應(yīng)用舉例文件activity_login.xml部分代碼如下所示。6.2.3SharedPreferences應(yīng)用舉例3.定義成員變量并綁定組件在LoginActivity.java文件中,為LoginActivity類增加下面三個成員變量。

EditTextetusername,etpwd;CheckBoxcbremember;SharedPreferencessharedPreferences;然后編寫initView()方法實(shí)現(xiàn)組件成員變量的綁定,并在onCreate()方法中調(diào)用該方法。6.2.3SharedPreferences應(yīng)用舉例4.在登錄按鈕點(diǎn)擊事件處理方法中利用SharedPreferences文件保存賬號和密碼。activity_login.xml已經(jīng)為登錄頁面中的“登錄”按鈕設(shè)置了組件的onClick單擊事件的方法名是login(),該方法的功能是根據(jù)用戶對“記住密碼”CheckBox組件的設(shè)置情況來決定是否將用戶輸入的賬號和密碼保存在本機(jī)應(yīng)用程序包目錄\shared_prefs\account.xml文件中。

6.2.3SharedPreferences應(yīng)用舉例login(Viewview)的完整代碼如下。5.實(shí)現(xiàn)頁面加載時讀取上次保存在SharedPreferences文件中的賬號和密碼。如果用戶勾選了“記住密碼”,那么下一次在登錄時就應(yīng)當(dāng)將存儲在account.xml文件中的賬號和

密碼讀取并顯示在登錄界面中。accountread()代碼如下。

6.2.3SharedPreferences應(yīng)用舉例

6.1文件存儲 6.2SharedPreferences存儲

6.3SQLite數(shù)據(jù)庫存儲內(nèi)容安排6.3SQLite數(shù)據(jù)庫存儲

應(yīng)用程序都需要存儲數(shù)據(jù),前面介紹的文件存儲可以保存一些簡單的數(shù)據(jù),SharedPreferencs只適用與保存鍵值對類型的數(shù)據(jù)。當(dāng)需要保存的數(shù)據(jù)量較大,且結(jié)構(gòu)復(fù)雜的關(guān)系型數(shù)據(jù)則需要使用數(shù)據(jù)庫,在Android中存儲數(shù)據(jù)的主要方法就是使用SQLite數(shù)據(jù)庫。6.3.1SQLite簡介

SQLite是Android中內(nèi)置的數(shù)據(jù)庫,為Android提供一個輕量級的關(guān)系型數(shù)據(jù)庫。Android原生支持SQLite,為此提供了如下的3個類。SQLiteOpenHelper:負(fù)責(zé)數(shù)據(jù)庫的創(chuàng)建和升級。SQLiteDatabase:負(fù)責(zé)接入數(shù)據(jù)庫,實(shí)現(xiàn)對數(shù)據(jù)的增刪改查操作。Cursor:負(fù)責(zé)讀寫數(shù)據(jù)庫。6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除

Android提供了基于SQLiteDatabse的SQLiteOpenHelper幫助類,用來管理數(shù)據(jù)庫的創(chuàng)建和版本更新。1.SQLiteOpenHelper簡介SQLiteOpenHelper管理數(shù)據(jù)庫體現(xiàn)在以下三個方面: 1)新建數(shù)據(jù):第一次安裝App時,數(shù)據(jù)庫文件不存在,助手會創(chuàng)建數(shù)據(jù)庫文件并建立表。2)便于訪問數(shù)據(jù)庫:SQLiteOpenHelper可以返回一個易于使用的數(shù)據(jù)庫對象,程序通過它訪

問數(shù)據(jù)庫,而非直接讀取數(shù)據(jù)庫文件。

3)數(shù)據(jù)庫格式升級維護(hù):當(dāng)數(shù)據(jù)庫的表結(jié)構(gòu)或表的數(shù)據(jù)發(fā)生變

化時,助手可在App升級時,

安全的轉(zhuǎn)換數(shù)據(jù)庫結(jié)構(gòu)。SQLiteOpenHelper類提供了兩個重要的方法,分別是onCreate()和onUpgrade()。onCreate()方法在初次生成數(shù)據(jù)庫時才會被調(diào)用,因此可以在onCreate()方法里添加生成數(shù)據(jù)庫

表結(jié)構(gòu)及一些應(yīng)用使用到的初始化數(shù)據(jù)。onUpgrade()方法在數(shù)據(jù)庫的版本發(fā)生變化時會被調(diào)

用,一般在軟件升級時才需改變版本號。6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除2.新建SQLiteOpenHelper子類數(shù)據(jù)庫創(chuàng)建的流程

使用SQLiteOpenHelper創(chuàng)建數(shù)據(jù)庫通常的步驟是:

子類繼承自SQLiteOpenHelper; SQLiteOpenHelper的子類必須提供構(gòu)造方法;

數(shù)據(jù)庫第一次被訪問時新建,需要指定文件名和版本號;

子類必須覆蓋SQLiteOpenHelper類的兩個抽象方法:onCreate()和onUpgrade(); onCreate()在數(shù)據(jù)庫被新建時調(diào)用; onUpgrade()在數(shù)據(jù)庫升級時被調(diào)用;6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除

3.SQLiteOpenHelper類的常用方法SQLiteOpenHelper提供的主要方法如表所示。方法作用abstractvoidonCreate(SQLiteDatabasedb)創(chuàng)建數(shù)據(jù)庫abstractvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)升級數(shù)據(jù)庫publicvoidonDowngrade(SQLiteDatabasedb,intoldVersion,intnewVersion)降級數(shù)據(jù)庫SQLiteDatabasegetReadableDatabase()以只讀方式打開數(shù)據(jù)庫SQLiteDatabasegetWritableDatabase()以讀寫方式打開數(shù)據(jù)庫publicvoidclose()關(guān)閉所有打開的SQLiteDatabase對象6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除6.3.3數(shù)據(jù)庫中表的操作1.SQLiteDatabase類簡介SQLiteDatabase代表一個數(shù)據(jù)庫,對應(yīng)了一個數(shù)據(jù)庫文件。數(shù)據(jù)庫使用表table存儲數(shù)據(jù)。SQLite支持的數(shù)據(jù)類型有五種,如表所示。數(shù)據(jù)類型說明INTEGER整數(shù)型VARCHAR字符型REAL浮點(diǎn)型NUMBERIC布爾型、日期型或日期時間型BLOB二進(jìn)制大數(shù)據(jù)2.創(chuàng)建表和刪除表1)新建表新建表可以通過SQLiteDatabase.execSQL()方法執(zhí)行SQL語句完成。Android在新建數(shù)據(jù)庫的時候會自動回調(diào)SQLiteOpenHelper的onCreate()方法。Android將SQLiteDatabase對象作為參數(shù)傳入onCreate(),因此在onCreate()中可以調(diào)用SQLiteDatabase.execSQL()方法完成表的創(chuàng)建。6.3.3數(shù)據(jù)庫中表的操作2.創(chuàng)建表和刪除表2)刪除表刪除表的操作是通過調(diào)用SQLiteDatabase類提供的execSQL()方法,執(zhí)行刪除表的SQL語句實(shí)現(xiàn)。例如,執(zhí)行下面的語句就可以刪除SQLiteDatabase類型對象db中的stu_info表。Stringsql=“droptablestu_info”;db.execSQL(sql);6.3.3數(shù)據(jù)庫中表的操作3.數(shù)據(jù)操作1)添加數(shù)據(jù)添加數(shù)據(jù)可以使用SQLiteDatabase的insert()方法和execSQL(

溫馨提示

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

評論

0/150

提交評論