版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
張霞深圳職業(yè)技術(shù)學院Android應用開發(fā)案例教程(AndroidStudio第二版)
0103020405AndroidUI設計圖像和動畫數(shù)據(jù)存儲廣播Broadcast與服務Service媒體播放與錄制Activity與多個用戶界面07網(wǎng)絡編程技術(shù)書目錄06第5章
數(shù)據(jù)存儲Android應用開發(fā)案例教程(AndroidStudio第二版)5.1文件存儲5.2JSON數(shù)據(jù)格式5.3輕量級存儲SharedPreferences5.4SQLite數(shù)據(jù)庫章目錄數(shù)據(jù)存儲技術(shù)Android有許多方式進行數(shù)據(jù)存儲,例如文件存儲、SharedPreferences存儲、JSON數(shù)據(jù)存儲、SQLite存儲,還有ContentProvider(共享數(shù)據(jù))和網(wǎng)絡存儲等方式。SharedPreferences用來存儲一些簡單的配置信息,如用戶名、密碼等。SQLite是一個Android自帶的輕量級的數(shù)據(jù)庫,支持基本SQL語法。JSON數(shù)據(jù)一般用于網(wǎng)絡數(shù)據(jù)交換,例如聊天機器人、天氣預報、交通信息查詢等。5.1文件存儲文件存儲是Android中最基本的一種數(shù)據(jù)存儲方式,與Java類似,通過I/0流的形式把數(shù)據(jù)直接讀或?qū)懙轿募ndroid中的文件存儲分為內(nèi)部存儲和外部存儲。內(nèi)部存儲即app內(nèi)部,外部存儲如SD卡。
5.1.1內(nèi)部存儲數(shù)據(jù)以文件方式存儲到設備的內(nèi)部,默認位于data/data/<packagename>/files/目錄下。文件被其所創(chuàng)建的app私有,當創(chuàng)建的app被卸載時,文件也隨之被刪除。使用Context提供的openFileoutput()和openFilelnput()方法,可以分別獲取FileOutputStream對象和FilelnputStream對象,然后進行讀寫操作。openFileOutput用于打開輸出流,將數(shù)據(jù)存儲到文件;openFileInput用于打開輸入流,讀取文件里的數(shù)據(jù);下面的參數(shù)“name”表示文件名,”mode”表示文件的操作模式,即讀寫方式。Fileoutputstreamfos=openFileOutput(Stringname,intmode);Filelnputstreamfis=openFileInput(Stringname);5.1.1內(nèi)部存儲將數(shù)據(jù)存儲到文件StringfileName="data.txt";Stringcontent="helloworld";//保存數(shù)據(jù)FileOutputStreamfos;try{fos=openFileOutput(fileName,MODE_PRIVATE);fos.write(content.getBytes());//將數(shù)據(jù)寫入文件中
fos.close();//關(guān)閉輸出流}catch(Exceptione){e.printStackTrace();}上述代碼中定義了文件名“data.txt”,以及要寫入的數(shù)據(jù)“hello
world”,然后創(chuàng)建FileOutputStream對象fos,通過其write()方法將數(shù)據(jù)寫入文件。5.1.1內(nèi)部存儲從文件讀取數(shù)據(jù)Stringcontent="";FileInputStreamfis;try{fis=openFileInput("data.txt");
//獲得文件輸入流對象
byte[]buffer=newbyte[fis.available()];
//創(chuàng)建緩沖區(qū),available()取得文件總字節(jié)數(shù)
fis.read(buffer);
//read()讀取數(shù)據(jù)的下一個字節(jié),可將文件讀取到buffer緩沖區(qū)
content=newString(buffer);
//轉(zhuǎn)換成字符串
fis.close();
//關(guān)閉輸入流}catch(Exceptione){e.printStackTrace();}上述代碼首先通過openFilelnput()方法獲得文件輸入流對象fis,然后創(chuàng)建byte數(shù)組為緩沖區(qū),通過read()將文件內(nèi)容讀取到buffer緩存區(qū),并轉(zhuǎn)換成字符串。5.1.1內(nèi)部存儲【例5-1】讀取與保存文件的應用程序示例。讀取與保存文件示例312外部存儲是指將文件存儲到一些外部設備上,如SD卡,屬于永久性的存儲方式。外部存儲的文件可以被其他應用程序所共享。由于外部存儲設備可能會被移除、丟失或處于其他狀態(tài),因此在使用外部設備之前必須確認外部設備是否可用。使用方法Environment.getExternalStorageState(),判斷是否等于:
Environment.MEDIA_MOUNTED訪問SD卡文件,可參考前面第三章的3.1節(jié)。5.1.2外部存儲5.1.2外部存儲Stringstate=Environment.gtExternalStorageState();
//獲取外部設備//判斷外部設備是否可用if(state.equals(Environment.MEDIA_MOUNTED)){
FileSDpath=Environment.getExternalStorageDirectory();
//獲取SD卡目錄Filefile=newFile(SDPath,"data.txt");Stringdata="Helloworld";try{
FileOutputStream
fos=newFileOutputStream(file);fos.write(data.getBytes());fos.close();}catch(Exceptione){e.printStackTrace();}}向SD卡中存儲數(shù)據(jù)getExternalStorageDirectory()方法用于獲取SD根目錄的路徑。由于手機廠商不同,SD卡根目錄也可能不同,因此要避免把路徑寫死而找不到SD卡。5.1.2外部存儲Stringstate=Environment.getExternalStorageState();//獲取外部設備//判斷外部設備是否可用if(state.equals(Environment.MEDIA_MOUNTED)){FileSDPath=Environment.getExternalStorageDirectory();//獲取SD卡目錄Filefile=newFile(SDPath,"data.txt");try{
FileInputStreamfis=newFileInputStream(file);byte[]buffer=newbyte[fis.available()];fis.read(buffer);Stringstr=newString(buffer);}catch(Exceptione){e.printStackTrace();}}從SD卡中讀取數(shù)據(jù)創(chuàng)建byte數(shù)組buffer為緩沖區(qū),通過read()將文件內(nèi)容讀取到buffer緩存區(qū),并轉(zhuǎn)換成字符串。5.1.2外部存儲為了保證應用程序的安全性,必須要聲明權(quán)限。在AndroidManifest.xml的根節(jié)點<manifest>里面添加SD卡的讀寫權(quán)限,代碼如下:在AndroidManifest.xml申請權(quán)限<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>5.1.2外部存儲【例5-2】讀取與保存文件的應用程序示例。從SD卡讀取與保存文件示例5.1文件存儲5.2JSON數(shù)據(jù)格式5.3輕量級存儲SharedPreferences5.4SQLite數(shù)據(jù)庫章目錄5.2JSON數(shù)據(jù)格式-÷×+JSON(JavascriptObjectNotation)是近幾年才流行的一種新的數(shù)據(jù)格式,它與XML非常相似,但相對于XML來說,解析速度更快,占用空間更小。JSON是一種輕量級的數(shù)據(jù)交換格式,與xml一樣,也是基于純文本的數(shù)據(jù)格式??蛻舳撕头掌鞯臄?shù)據(jù)交換格式,往往通過JSON來進行交換。尤其適合web開發(fā)。JSON正成為理想的數(shù)據(jù)交互語言,易于閱讀和編寫,同時也易于機器解析和生成。5.2.1JSON數(shù)據(jù)介紹兩種數(shù)據(jù)結(jié)構(gòu):對象結(jié)構(gòu)JSONObject、數(shù)組結(jié)構(gòu)JSONArray5.2.2JSON的數(shù)據(jù)結(jié)構(gòu)01對象結(jié)構(gòu)JSONObjectJSON對象可以包括多個鍵值對,要求在大括號“{}”中書寫。最簡單的JSON對象,例如{"城市":"大理"}{"城市":"大理","日期":"20180103","天氣":"0-14度,多云","風力":2}JSON對象的值也可以是另外一個JSON對象,例如:{"城市":"大理",
"日期":"20180103",
"天氣":"0-14度,多云",
"未來3天氣溫":{"20180104":"0-16度,晴","20180105":"1-18度,晴",20180106":"2-19度,晴轉(zhuǎn)小雨"}}5.2.2JSON的數(shù)據(jù)結(jié)構(gòu)02數(shù)組結(jié)構(gòu)JSONArrayJSON數(shù)組可以包含多個JSON對象做元素,每個元素之間用逗號分隔,最外面用方括號。JSON數(shù)組是JSON對象的有序集合。如果想訪問數(shù)組第一個元素的屬性“城市”,可以這樣表示:
weather[0].城市,其返回值為“大理”。weather=[{"城市":"大理","氣溫":"0-14度,多云"},{"城市":"成都","氣溫":"2-4度,小雨"},{"城市":"拉薩","氣溫":"-9-5度,多云"}]解析JSON數(shù)據(jù),需要使用JSONObject和JSONArrary。JSONObject對象,是{key:value}鍵值對格式。例如:JSONArray對象,是JSON數(shù)組格式,存放的是一個或者多個JSONObject對象。例如:5.2.2JSON的數(shù)據(jù)結(jié)構(gòu)解析JSON格式數(shù)據(jù)JSONObjectsz=newJSONObject();//單個JSON對象sz.put("城市","深圳");sz.put("氣溫",30);JSONObjectcd=newJSONObject("{\"城市\(zhòng)":\"成都\",\"氣溫\":\"21-28度,小雨\"}");weather=newJSONArray();weather.put(sz);weather.put(cd);5.2.3JSON文件JSON文件的擴展名是“.json”可以用記事本或其他編輯工具編寫JSON文件例如文件weather.json,內(nèi)容如下:{"city":"深圳","date":"15日星期日","high":"高溫29℃","fx":"無持續(xù)風向","low":"低溫25℃","type":"中雨"}5.2.3JSON文件文件weather.json可以放到assets目錄AssetManageram=getAssets();//獲得assets資源管理器{"city":"深圳","date":"15日星期日","high":"高溫29℃","fx":"無持續(xù)風向","low":"低溫25℃","type":"中雨"}5.2.4解析JSON數(shù)據(jù)下面通過一個示例說明解析JSON數(shù)據(jù)的方法。【例5-3】解析JSON格式數(shù)據(jù)示例5.1文件存儲5.2JSON數(shù)據(jù)格式5.3輕量級存儲SharedPreferences5.4SQLite數(shù)據(jù)庫章目錄5.3輕量級存儲SharedPreferencesAndroid系統(tǒng)提供了一個存儲少量數(shù)據(jù)的存儲方式SharedPreferences。該存儲方式類似于Web的Cookie,通常用它來保存一些常用信息,例如用戶名及密碼等。SharedPreferences采用鍵值對的形式管理數(shù)據(jù)。5.3輕量級存儲SharedPreferences【例5-4】應用SharedPreferences對象保存一個客戶的聯(lián)系電話。布局的控件層級關(guān)系、屬性和界面效果5.1文件存儲5.2JSON數(shù)據(jù)格式5.3輕量級存儲SharedPreferences5.4SQLite數(shù)據(jù)庫章目錄5.4SQLite數(shù)據(jù)庫SQLite數(shù)據(jù)庫是一個關(guān)系型數(shù)據(jù)庫,因為它很小,引擎本身只是一個大小不到300KB的文件,所以常作為嵌入式數(shù)據(jù)庫內(nèi)置在應用程序中。SQLite生成的數(shù)據(jù)庫文件是一個普通的磁盤文件,可以放置在任何目錄下。SQLite是用C語言開發(fā)的,開放源代碼,支持跨平臺,被所有的主流編程語言支持。SQLite是一個非常優(yōu)秀的嵌入式數(shù)據(jù)庫。SQLite數(shù)據(jù)庫的管理工具很多,常用的有SQLiteExpertProfessional,可以在可視化的環(huán)境下完成所有數(shù)據(jù)庫操作,可以方便地創(chuàng)建數(shù)據(jù)表和對數(shù)據(jù)記錄進行增加、刪除、修改、查詢操作。5.4.1SQLite數(shù)據(jù)庫簡介5.4.1SQLite數(shù)據(jù)庫簡介SQLite數(shù)據(jù)庫的操作有三個層次312對數(shù)據(jù)庫操作:建立數(shù)據(jù)庫或刪除數(shù)據(jù)庫。對數(shù)據(jù)表操作:建立、修改或刪除數(shù)據(jù)表。對數(shù)據(jù)記錄操作:對數(shù)據(jù)記錄進行添加、刪除、
修改、查詢等操作。5.4.2數(shù)據(jù)庫的管理和操作SQLite數(shù)據(jù)庫的API主要有SQLiteDatabase和SQLiteOpenHelper。
SQLiteDatabase類Android對SQLite的底層做了封裝,幾乎所有對數(shù)據(jù)庫的操作最終都通過SQLiteDatabase類來實現(xiàn)。SQLiteOpenHelper類是一個抽象類,輔助類,主要用于對數(shù)據(jù)庫的版本進行管理,也可以創(chuàng)建數(shù)據(jù)庫。構(gòu)造器SQLiteOpenHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion)125.4.2數(shù)據(jù)庫的管理和操作SQLite數(shù)據(jù)庫的管理和操作創(chuàng)建數(shù)據(jù)庫的方法有多種:
應用SQLiteDatabase類的方法創(chuàng)建數(shù)據(jù)庫。
應用SQLiteOpenHelper類的方法創(chuàng)建數(shù)據(jù)庫。
應用Context類的方法創(chuàng)建數(shù)據(jù)庫。1235.4.2數(shù)據(jù)庫的管理和操作應用Context類的方法創(chuàng)建數(shù)據(jù)庫Context字面意思是“上下文”,Context提供的方法適用于上下文及子類創(chuàng)建數(shù)據(jù)庫,且創(chuàng)建的數(shù)據(jù)庫只在特定的Context里面,對于數(shù)據(jù)庫的權(quán)限,交由Context來管理。Context類的openOrCreateDatabase(DatabaseName,mode,factory)方法有3個參數(shù)。第1個參數(shù),數(shù)據(jù)庫名稱。第2個參數(shù),打開或創(chuàng)建數(shù)據(jù)庫的模式,MODE_PRIVATE是默認模式。第3個參數(shù),為查詢數(shù)據(jù)的游標,通常為null。
intmode=Context.MODE_PRIVATE;db=openOrCreateDatabase(Database_name,mode,null);5.4.2數(shù)據(jù)庫的管理和操作應用Context類的方法刪除數(shù)據(jù)庫當要刪除一個指定的數(shù)據(jù)庫文件時,需要應用deleteDatabase()方法。例如要刪除名為eBook.db的數(shù)據(jù)庫,則可以使用下列代碼:MainActivity.this.deleteDatabase("eBook.db");5.4.3數(shù)據(jù)表的管理和操作創(chuàng)建數(shù)據(jù)表用SQL語句編寫創(chuàng)建數(shù)據(jù)表的命令。調(diào)用SQLiteDatabase的execSQL()方法執(zhí)行SQL語句。刪除數(shù)據(jù)表刪除數(shù)據(jù)表的步驟與創(chuàng)建數(shù)據(jù)表類似,先編寫刪除表的SQL語句,再調(diào)用execSQL()方法執(zhí)行SQL語句。01025.4.2數(shù)據(jù)庫的管理和操作【例5-5】編寫一個反復創(chuàng)建與刪除數(shù)據(jù)庫的演示程序運行程序后,通過DDMS工具調(diào)試監(jiān)控視圖,在data\data\xxxx(包名)\databases下可以看到下圖創(chuàng)建的數(shù)據(jù)庫文件eBook.db。創(chuàng)建與刪除數(shù)據(jù)庫示例在DDMS視圖中的數(shù)據(jù)庫文件5.4.3數(shù)據(jù)表的管理和操作0102解決辦法1,如果數(shù)據(jù)表不存在,就創(chuàng)建數(shù)據(jù)表StringDATABASE_CREATE=“CREATE
TABLEIFNOTEXISTS
"+TABLE_NAME+"("+
ID+"
INTEGERprimarykeyautoincrement,"+
TITLE+"
textnotnull,"+BODY+"
textnotnull)";db.execSQL(DATABASE_CREATE);//創(chuàng)建數(shù)據(jù)表解決辦法2,先刪除數(shù)據(jù)表,再創(chuàng)建數(shù)據(jù)表db.execSQL("droptableifexists"+TABLE_NAME);Stringstr2="CREATETABLE"+TABLE_NAME+"("+ID+"INTEGERprimarykeyautoincrement,"+TITLE+"textnotnull,"+BODY+"textnotnull);";db.execSQL(str2);編寫SQL語句,創(chuàng)建數(shù)據(jù)表,注意SQL語句中單詞之間的空格5.4.4數(shù)據(jù)記錄的管理和操作對數(shù)據(jù)記錄的操作有兩種處理:編寫對記錄進行增、刪、改、查的SOL語句,通過execSQL()方法來執(zhí)行,本書略過。使用SQLiteDatabase的相應方法進行操作:新增記錄insert()修改記錄update()刪除記錄delete()查詢記錄query()SQLiteDatabase的方法1.新增記錄insert(Stringtable,StringnullColumnHack,ContentValues)2.修改記錄update(Stringtable,ContentValues,StringwhereClause,String[]whereArgs)3.刪除記錄delete(Stringtable,StringwhereClause,String[]whereArgs)4.查詢記錄,query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy)query()查詢的記錄被封裝到查詢結(jié)果Cursor,Cursor相當于SQL語句中記錄集resultSet的一個游標,可以向前或向后移動。新增記錄insert()語法格式如下:insert(Stringtable,StringnullColumnHack
,
ContentValues)該方法中有3個參數(shù),含義如下。(1)第1個參數(shù)table:數(shù)據(jù)表。(2)第2個參數(shù)nullColumnHack:空列,默認值為null。(3)第3個參數(shù)ContentValues:為ContentValues對象,保存“鍵值對”數(shù)據(jù),鍵為字段名,值為數(shù)據(jù)。通過ContentValues對象的put方法把鍵值對數(shù)據(jù)放到ContentValues對象中。刪除記錄delete()語法格式如下:delet
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《翡翠培訓資料》課件
- 《證券買賣技巧教案》課件
- 《證券基金銷售培訓》課件
- 單位管理制度集粹匯編員工管理篇
- 單位管理制度分享大全【人力資源管理篇】
- 《社區(qū)工作實務》課件
- 單位管理制度范例選集【人力資源管理篇】十篇
- 單位管理制度范例合集職工管理十篇
- 單位管理制度呈現(xiàn)合集【人事管理】十篇
- 寒假自習課 25春初中地理八年級下冊人教版教學課件 第八章 第二節(jié) 干旱的寶地-塔里木盆地 第2課時 油氣資源的開發(fā)
- 老年病及老年綜合征中醫(yī)證治概要
- 三年級上冊數(shù)學說課稿- 2.2 看一看(二)-北師大版
- 超星爾雅學習通《西廂記》賞析(首都師范大學)網(wǎng)課章節(jié)測試答案
- 切削液的配方
- 塑料門窗及型材功能結(jié)構(gòu)尺寸
- 2023-2024學年湖南省懷化市小學數(shù)學五年級上冊期末深度自測試卷
- GB 7101-2022食品安全國家標準飲料
- 超實用的發(fā)聲訓練方法
- 《第六課 從傳統(tǒng)到現(xiàn)代課件》高中美術(shù)湘美版美術(shù)鑒賞
- 英語四六級講座課件
- Unit 3 On the move Understanding ideas(Running into a better life)課件- 高一上學期英語外研版(2019)必修第二冊
評論
0/150
提交評論