移動(dòng)終端應(yīng)用開(kāi)發(fā)-第四章-Android數(shù)據(jù)存儲(chǔ)_第1頁(yè)
移動(dòng)終端應(yīng)用開(kāi)發(fā)-第四章-Android數(shù)據(jù)存儲(chǔ)_第2頁(yè)
移動(dòng)終端應(yīng)用開(kāi)發(fā)-第四章-Android數(shù)據(jù)存儲(chǔ)_第3頁(yè)
移動(dòng)終端應(yīng)用開(kāi)發(fā)-第四章-Android數(shù)據(jù)存儲(chǔ)_第4頁(yè)
移動(dòng)終端應(yīng)用開(kāi)發(fā)-第四章-Android數(shù)據(jù)存儲(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Preference存儲(chǔ)4.1本章主要內(nèi)容File存儲(chǔ)4.2SQLite數(shù)據(jù)庫(kù)4.3使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享4.4PreferencePreference提供了一種輕量級(jí)的數(shù)據(jù)存取方法,一般用于數(shù)據(jù)較少的配置信息的存儲(chǔ)場(chǎng)合。使用Preference方式來(lái)存取數(shù)據(jù)。SharedPreferences是Android的一種存儲(chǔ)簡(jiǎn)單信息機(jī)制。SharedPreferences以鍵-值對(duì)的方式存儲(chǔ)。該鍵-值對(duì)以xml格式文件形式存儲(chǔ),在DDMS的FileExplorer中展開(kāi)到/data/data/<package>/shared_prefs目錄中可以看到。4.1Preference存儲(chǔ)讀取SharedPreferencesgetSharedPreferences(String,int)-獲取SharedPreferences

對(duì)象第一個(gè)參數(shù)為文件名,不需要包含后綴名(即shared_prefs目錄下的xml文件名稱)第二個(gè)參數(shù)為訪問(wèn)模式,設(shè)置SharedPreferences對(duì)象的權(quán)限。MODE_PRIVATE,(MODE_PRIVATE=0)

,應(yīng)用程序私有。常用!MODE_WORLD_READABLE,其他程序可讀。MODE_WORLD_WRITEABLE,其他程序可寫(xiě)。4.1Preference存儲(chǔ)SharedPreferences對(duì)象的數(shù)據(jù)讀取通過(guò)SharedPreferences對(duì)象的鍵key,獲取到對(duì)應(yīng)key的鍵值。對(duì)于不同類(lèi)型的鍵值有不同的函數(shù):getString,getBoolean,getInt,getFloat,getLong。如:4.1Preference存儲(chǔ)SharedPreferencessp=getSharedPreferences("config",Context.MODE_PRIVATE);Stringusername=sp.getString(“username”,“root”);Stringpassword=sp.getString(“password”,“123456”);SharedPreferences對(duì)象的數(shù)據(jù)寫(xiě)入通過(guò)SharedPreferences對(duì)象的編輯器對(duì)象Editor來(lái)實(shí)現(xiàn)Editor對(duì)象中包含了寫(xiě)數(shù)據(jù)的方法數(shù)據(jù)寫(xiě)入后要執(zhí)行commit()方法,讓數(shù)據(jù)生效如:4.1Preference存儲(chǔ)SharedPreferencessp=getSharedPreferences("config",Context.MODE_PRIVATE);Editoreditor=sp.edit();editor.put(“username”,“root”);editor.put(“password”,“123456”);mit();SharedPreferencessp=getSharedPreferences(FILE_NAME,MODE_PRIVATE);SharedPreferences.Editoreditor=sp.edit();editor.putString("用戶名",name);editor.putString("密碼",password);editor.commit();【例】保存登錄用戶名和密碼保存數(shù)據(jù)4.1Preference存儲(chǔ)SharedPreferencessp=getSharedPreferences(FILE_NAME,MODE_PRIVATE);username=sp.getString("用戶名",null);userpassword=sp.getString("密碼",null);if((username!=null)&&(userpassword!=null)){userName.setText(username);password.setText(userpassword);rememberMe.setChecked(true);}【例】保存登錄用戶名和密碼讀取數(shù)據(jù)4.1Preference存儲(chǔ)文件存儲(chǔ)常用于存儲(chǔ)一些聲音,視頻,圖像等媒體文件。支持標(biāo)準(zhǔn)的JavaI/O讀寫(xiě)方法。下列JavaI/O包中的類(lèi)可以正常工作于Android平臺(tái)上:Java.io.BufferedReaderJava.io.BufferedWriterJava.io.FileReaderJava.io.FileWriterJava.io.FileOutputStreamJava.io.FileInputStreamJava.io.FileNotFoundExceptionJava.io.IOExceptionJava.io.OutputStreamJava.io.InputStreamJava.io.OutputStreamWriterJava.io.InputStreamReaderJava.io.PrintStreamJava.io.PrintWriter4.2

File存儲(chǔ)利用openFileInput讀取文件能夠從應(yīng)用相關(guān)路徑中打開(kāi)一個(gè)文件輸入流/data/data/<package>/files返回值是一個(gè)FileInputStream對(duì)象4.2

File存儲(chǔ)利用openFileOutput寫(xiě)入文件文件不存在時(shí)自動(dòng)創(chuàng)建打開(kāi)模式參數(shù)(方法第二個(gè)參數(shù))MODE_PRIVATE只能創(chuàng)建它的應(yīng)用訪問(wèn),重復(fù)寫(xiě)入時(shí)會(huì)文件覆蓋MODE_APPEND私有訪問(wèn),重復(fù)寫(xiě)入時(shí)會(huì)在文件的末尾進(jìn)行追加MODE_WORLD_READABLE公用模式,可讀MODE_WORLD_WRITEABLE公用模式,可讀寫(xiě)建議使用私有模式【例】保存文件信息4.2

File存儲(chǔ)FileOutputStreamout=openFileOutput(FILE_NAME,Context.MODE_PRIVATE);out.write(edittext.getText().toString().getBytes());out.flush();out.close();【例】加載文件信息4.2

File存儲(chǔ)FileInputStreamin=openFileInput(FILE_NAME);ByteArrayOutputStreamos=newByteArrayOutputStream();byte[]buf=newbyte[1024];intlen=0;while((len=in.read(buf))!=-1){os.write(buf,0,len);}os.close();in.close();edittext.setText(newString(os.toByteArray()));SQLite:用于存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)Android自帶的輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù)由C語(yǔ)言編寫(xiě)而成支持SQL標(biāo)準(zhǔn)嵌入到應(yīng)用程序內(nèi)部的數(shù)據(jù)庫(kù)支持多種操作系統(tǒng)完全獨(dú)立運(yùn)行,沒(méi)有依賴性最大支持?jǐn)?shù)據(jù)庫(kù)到2TB默認(rèn)情況下,SQLite數(shù)據(jù)庫(kù)是應(yīng)用程序私有的數(shù)據(jù)庫(kù)存儲(chǔ)位置:data/data/<package>/databases目錄下4.3

SQLite數(shù)據(jù)庫(kù)SQLite數(shù)據(jù)庫(kù)命令行工具下載:/download.htmlSQLite數(shù)據(jù)庫(kù)相關(guān)類(lèi)/接口SQLiteDatabase類(lèi)一個(gè)SQLiteDatabase的實(shí)例代表一個(gè)SQLite數(shù)據(jù)庫(kù)。通過(guò)SQLiteDatabase實(shí)例的方法,可以執(zhí)行SQL語(yǔ)句,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改、查等操作。SQLiteOpenHelper類(lèi)是一個(gè)輔助類(lèi),主要用來(lái)管理數(shù)據(jù)庫(kù)的創(chuàng)建和版本。是一個(gè)抽象類(lèi),通常需要?jiǎng)?chuàng)建子類(lèi)繼承它。Cursor接口Cursor是Android的非常有用的接口。通過(guò)Cursor可以對(duì)數(shù)據(jù)庫(kù)的查詢結(jié)果集進(jìn)行隨機(jī)的讀寫(xiě)訪問(wèn)。ContentValues類(lèi)ContentValues存儲(chǔ)一些名值對(duì)。提供數(shù)據(jù)庫(kù)的列名、數(shù)據(jù)映射信息。ContentValues對(duì)象代表了數(shù)據(jù)庫(kù)的一行數(shù)據(jù)。4.3

SQLite數(shù)據(jù)庫(kù)SQLiteDatabase類(lèi)創(chuàng)建或打開(kāi)數(shù)據(jù)庫(kù)的靜態(tài)方法openDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory,intflags)功能:

打開(kāi)指定路徑的數(shù)據(jù)庫(kù)文件。參數(shù)path:指定路徑的數(shù)據(jù)庫(kù)文件;參數(shù)factory:用于構(gòu)造查詢時(shí)返回的Cursor對(duì)象;參數(shù)flags:打開(kāi)模式,包括:OPEN_READONLY(只讀方式)OPEN_READWRITE(可讀可寫(xiě))CREATE_IF_NECESSARY(當(dāng)數(shù)據(jù)庫(kù)文件不存在時(shí),創(chuàng)建該數(shù)據(jù)庫(kù))openOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)相當(dāng)于openDatabase()方法打開(kāi)模式為CREATE_IF_NECESSARY的情形。4.3

SQLite數(shù)據(jù)庫(kù)SQLiteDatabase類(lèi)數(shù)據(jù)庫(kù)的增、刪、改、查使用SQL語(yǔ)句。通過(guò)SQLiteDatabase對(duì)象調(diào)用execSQL()實(shí)現(xiàn)使用SQLiteDatabase類(lèi)提供的數(shù)據(jù)庫(kù)操作方法SQLiteDatabase類(lèi)提供的數(shù)據(jù)庫(kù)操作方法insert():將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)當(dāng)中。有三個(gè)參數(shù):第一個(gè)參數(shù):數(shù)據(jù)表名稱第二個(gè)參數(shù):SQl不允許一個(gè)空列,如果ContentValues是空的,那么這一列被明確的指明為該參數(shù)值第三個(gè)參數(shù):ContentValues對(duì)象,為插入值例:sqliteDatabase.insert(“user”,null,values);4.3

SQLite數(shù)據(jù)庫(kù)SQLiteDatabase類(lèi)SQLiteDatabase類(lèi)提供的數(shù)據(jù)庫(kù)操作方法query():查詢數(shù)據(jù)庫(kù)所有記錄,返回Cursor類(lèi)。有七個(gè)參數(shù):第一個(gè)參數(shù):數(shù)據(jù)表名稱第二個(gè)參數(shù):選擇包含的字段第三個(gè)參數(shù):where子句,條件表達(dá)式第四個(gè)參數(shù):條件值第五個(gè)參數(shù):group子句第六個(gè)參數(shù):having子句第七個(gè)參數(shù):查詢結(jié)果排序字段例:sqliteDatabase.query(“users”, newString[]{“name”,“age”},“age>?”,newString[]{“10”},null,null,“namedesc”);4.3

SQLite數(shù)據(jù)庫(kù)SQLiteDatabase類(lèi)SQLiteDatabase類(lèi)提供的數(shù)據(jù)庫(kù)操作方法update():修改表中數(shù)據(jù)。有四個(gè)參數(shù):第一個(gè)參數(shù):String,數(shù)據(jù)表名稱。第二個(gè)參數(shù):ContentValues,ContentValues對(duì)象。第三個(gè)參數(shù):String,where子句,相當(dāng)于sql語(yǔ)句where后面的語(yǔ)句,?號(hào)是占位符。第四個(gè)參數(shù):String[],占位符的值。例:sqliteDatabase.update("user",values,"id=?",newString[]{"1"});delete():刪除表中數(shù)據(jù)。有三個(gè)參數(shù):第一個(gè)參數(shù):String,數(shù)據(jù)表名稱。第二個(gè)參數(shù):String,條件語(yǔ)句。第三個(gè)參數(shù):String[],條件值。例:sqliteDatabase.delete("user","id=?",newString[]{"1"});4.3

SQLite數(shù)據(jù)庫(kù)SQLiteOpenHelper類(lèi)SQLiteOpenHelper是一個(gè)抽象類(lèi),需要?jiǎng)?chuàng)建其子類(lèi)。子類(lèi)必須重寫(xiě)三個(gè)方法:構(gòu)造方法,onCreate和onUpgrate方法。構(gòu)造方法:publicDatabaseHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion)第一個(gè)參數(shù):Context類(lèi)型,上下文對(duì)象。第二個(gè)參數(shù):String類(lèi)型,數(shù)據(jù)庫(kù)的名稱第三個(gè)參數(shù):CursorFactory類(lèi)型第四個(gè)參數(shù):int類(lèi)型,數(shù)據(jù)庫(kù)版本onCreate(SQLiteDatabase):在數(shù)據(jù)庫(kù)第一次生成時(shí)調(diào)用。一般在該方法里實(shí)現(xiàn)生成數(shù)據(jù)庫(kù)表。onUpdate(SQLiteDatabase):當(dāng)數(shù)據(jù)庫(kù)需要升級(jí)時(shí),Android系統(tǒng)會(huì)主動(dòng)調(diào)用該方法。一般在該方法里實(shí)現(xiàn)刪除數(shù)據(jù)表,并建立新的數(shù)據(jù)表。SQLiteOpenHelper對(duì)象創(chuàng)建或打開(kāi)數(shù)據(jù)庫(kù)方法:getWritableDatabase():創(chuàng)建或打開(kāi)一個(gè)可以讀寫(xiě)的數(shù)據(jù)庫(kù)。getReadableDatabase():創(chuàng)建或打開(kāi)一個(gè)數(shù)據(jù)庫(kù)。4.3

SQLite數(shù)據(jù)庫(kù)使用SQLiteDatabase類(lèi)連接數(shù)據(jù)庫(kù)使用SQLiteOpenHelper類(lèi)連接數(shù)據(jù)庫(kù)4.3

SQLite數(shù)據(jù)庫(kù)SQLiteDatabasedb=SQLiteDatabase.openOrCreateDatabase(dbFile,null);publicclassMyHelperextendsSQLiteOpenHelper{publicstaticfinalintVERSION=1;publicstaticfinalStringDATABASE_NAME=“test.db”;publicMyHelper(Contextcontext){

super(context,DATABASE_NAME,null,VERSION);}}SQLiteDatabasedb=helper.getWritableDatabase();Cursor類(lèi)Cursor類(lèi)用于操作數(shù)據(jù)庫(kù)查詢結(jié)果的方法:moveToFirst:將指針移到第一行。moveToNext:將指針移到下一行。moveToPrevious:將指針移到上一行。getCount:查詢結(jié)果集的行數(shù)。getColumnIndexOrThrow:返回指定名稱的列的索引,如列不存在則拋出異常。getColumnName:返回指定索引的列的名稱。getColumnNames:返回所有列的名稱。moveToPosition:將指針移到指定的行。getPosition:返回當(dāng)前指針的位置。4.3

SQLite數(shù)據(jù)庫(kù)publicvoidonCreate(SQLiteDatabasedb){Stringsql="createtablebooks("+"idintegerprimarykeyautoincrement,"+"namevarchar(128)notnullunique,"+"authorvarchar(128)notnull,"+"pricedoublenotnull)";db.execSQL(sql);}【例】連接數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)關(guān)閉數(shù)據(jù)庫(kù)4.3

SQLite數(shù)據(jù)庫(kù)SQLiteDatabasedb=newBookService(MainActivity.this).getWritableDatabase();if(db!=null){db.close();}【例】將日志信息存儲(chǔ)到數(shù)據(jù)庫(kù)中運(yùn)行效果4.3

SQLite數(shù)據(jù)庫(kù)【例】將日志信息存儲(chǔ)到數(shù)據(jù)庫(kù)中運(yùn)行效果4.3

SQLite數(shù)據(jù)庫(kù)ContentProviderAndroid程序中的數(shù)據(jù)(如:SharedPreferences、文件數(shù)據(jù)和數(shù)據(jù)庫(kù)數(shù)據(jù)等)都是私有的ContentProvider是實(shí)現(xiàn)兩個(gè)程序間進(jìn)行數(shù)據(jù)交換的組件ContentProvider是基于權(quán)限控制的對(duì)ContentProvider內(nèi)容的操作主要通過(guò)ContentResolver類(lèi)來(lái)實(shí)現(xiàn)4.4使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享ContentProvider常見(jiàn)的接口:query(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder)通過(guò)Uri進(jìn)行查詢,返回一個(gè)Cursorinsert(Uriuri,ContentValuesvalues)將一組數(shù)據(jù)插入到Uri指定的地方update(Uriuri,ContentValuesvalues,Stringwhere,String[]selectionArgs)更新Uri指定位置,并且符合一定條件的數(shù)據(jù)delete(Uriuri,Stringwhere,String[]selectionArgs)刪除Uri指定位置,并且符合一定條件的數(shù)據(jù)4.4使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享ContentResolver當(dāng)外部應(yīng)用程序需要對(duì)ContentProvider中的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢操作時(shí),可以使用ContentResolver接口來(lái)完成。ContentResolver提供的接口與ContentProvider中需要實(shí)現(xiàn)的接口對(duì)應(yīng)。獲取ContentResolver對(duì)象的方法:getContentResolver()

例:4.4使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享ContentResolvercr=getContentResolver();Uri在ContentProvider和ContentResolver中用到的Uri形式:指定全部數(shù)據(jù)。例:content://contacts/people/——指定全部的聯(lián)系人數(shù)據(jù)指定某個(gè)ID的數(shù)據(jù)。例:content://contacts/people/2——指定ID為2的聯(lián)系人數(shù)據(jù)Uri比較長(zhǎng),在編程時(shí)通常定義一些常量是來(lái)代替這些長(zhǎng)字符串的Uri。例:在定義ContentProvider接口的代碼文件CONTENT_URI相當(dāng)于: content://com.tjrac.xxx.mycontentprovider/diaries注意:以上字符串的字母全部用小寫(xiě)。4.4使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享publicstaticfinalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/diaries");設(shè)置權(quán)限對(duì)ContentProvider中的數(shù)據(jù)進(jìn)行操作,都需要在AndroidManifest.xml文件中添加相應(yīng)的權(quán)限。例如,對(duì)手機(jī)的通訊錄進(jìn)行查詢和修改操作,則在AndroidManifest.xml文件的<manifest>標(biāo)簽內(nèi)需要添加下列權(quán)限設(shè)置:4.4使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享<uses-permissionandroid:name="android.permission.READ_CONTACTS"/><uses-permissionandroid:name="android.permission.WRITE_CONTACTS"/>【例】查看手機(jī)通訊錄查詢數(shù)據(jù)ContentResolvercr=getContentResolver();Uriuri=Contacts.CONTENT_URI;Cursorc=cr.query(uri,newString[]{Contacts._ID,Contacts.DISPLAY_NAME},null,null,null);4.4使用ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享【例】查看手機(jī)通訊錄插入數(shù)據(jù)ContentResolvercr=getContentResolver();ContentValuesvalues=newContentValues();Uriuri=cr.insert(RawContacts.CONTENT_URI,values);Longraw_contact_id=ContentUris.parseId(uri);values.clear();values.put(StructuredName.RAW_CONTACT_ID,raw_contact_id);values.put(StructuredName.DISPLAY_NAME,"李四");values.put(StructuredName.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);cr.insert(Data.CONTENT_URI,values);values.clear();values.put(Phone.RAW_CONTACT_ID,raw_contact_id);values.put(Phone.NUMBER,);values.put(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE);cr.insert(Data.CONTENT_URI,valu

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論