




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第六章 數據存儲6.1 數據存儲方式6.5實戰演練手機通訊錄6.3 SharedPreferences存儲6.6 小結6.2 文件存儲6.4 SQLite數據庫存儲6.1 數據存儲方式 Android平臺提供3種數據存儲方式文件存儲:是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現I/O程序是完全一樣的,提供openFileInput()和openFileoutput()方法來讀取設備上的文件。可以用來存儲大數據,如文本、圖片、音頻和視頻等。SharedPreferences:是Android提供的用來存儲一些簡單配置信息的一種機制,采用了XML格式將數據存儲到設備
2、中。一般用來存儲應用程序的各種配置信息,例如用戶名、密碼、網絡配置信息等。SQLite數據庫:SQLite是Android自帶的一個輕量級數據庫,支持SQL標準語法,利用很少的內存就有很好的性能,一般使用它作為復雜數據的存儲引擎,可以存儲用戶信息等。6.2 文件存儲6.2.1 文件存儲簡介文件存儲是Android種最基本的一種數據存儲方式,與Java中的文件存儲存儲類似,都是通過I/O流的形式把數據直接存儲到文檔中。不同的是,Android中的文件存儲分為內部存儲和外部存儲6.2 文件存儲6.2.2 文件存儲在內部內部存儲是指將應用程序中的數據以文件方式存儲到設備內部(默認存儲到/data/d
3、ata/files/目錄下)內部存儲方式存儲的文件被其所創建的應用程序私有,如果其他應用程序要操作本程序中的文件,需要設置權限。當創建的應用程序被卸載時,其內部存儲文件也隨之被刪除。6.2 文件存儲內部存儲使用的是Context類中提供的openFileOutput()方法和openFileInput()兩個方法,通過這兩個方法可以分別獲取FileOutputStream對象和FileInputStream對象,然后進行讀寫操作:openFileOutput()用于打開應用程序中對應的輸出流,將數據存儲到指定的文件中;openFileInput()用于打開應用程序對應的輸入流,讀取指定文件中的
4、數據;其中參數“name”表示文件名,“mode”表示文件操作模式:MODE_PRIVATE是默認的操作模式MODE_APPEND則表示如果該文件已存在,就往文件里面追加內容FileOutputStream fos = openFileOutput(String name,int mode);FileInputStream fin = openFileInput(String name);6.2 文件存儲/創建輸出流 FileOutputStream fos; /通過輸出流將數據保存 try/使用OpenFileOutput方法獲取文件對象 fos = openFileOutput(data.
5、txt,MODE_APPEND); fos.write(saveInfo.getBytes(); fos.close(); catch(Exception e) e.printStackTrace(); 寫入過程:讀取過程: /讀取過程 try /通過輸入流將文件都取進來FileInputStream fin = openFileInput(data.txt);byte buffer = new bytefin.available(); fin.read(buffer); content = new String(buffer); fin.close(); catch(Exception e)
6、 e.printStackTrace(); 6.2 文件存儲6.2.3 文件存儲在外部內部存儲是指將應用程序中的數據以文件方式存儲到設備內部(默認存儲到/data/data/files/目錄下)內部存儲方式存儲的文件被其所創建的應用程序私有,如果其他應用程序要操作本程序中的文件,需要設置權限。當創建的應用程序被卸載時,其內部存儲文件也隨之被刪除。6.2 文件存儲由于外部存儲設備可能被移除、丟失或處于其他狀態,因此在使用外部設備之前必須使用Environment的getExternalStorageState()方法來確認外部設備是否可用Android 6.0之后系統為了更好的保護用戶個人隱私,
7、添加了運行時權限:分為兩類,一類是Normal Permissions,這類權限不涉及個人隱私,不需要用戶進行授權,比如手機震動,訪問網絡;一類是Dangerous Permissions,這類權限涉及個人隱私,需要用戶進行授權,比如讀取SD卡,訪問通訊錄等。Android系統為了保證應用程序的安全做了相應規定,如果程序需要訪問系統的一些關鍵信息,必須要在清單文件中聲明權限才可以,否則程序運行時會直接崩潰6.2 文件存儲首先在活動中調用onCreate()方法前聲明運行時權限組:在onCreate()方法調用時,進行build版本比對并授予運行時權限:private static String
8、 PERMISSION_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE ; /請求狀態碼 private static int REQUEST_PERMISSION_CODE = 2;if(Build.VERSION.SDK_INTBuild.VERSION_CODES.LOLLIPOP) if(ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_
9、EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED)ActivityCompat.requestPermissions(MainActivity.this,PERMISSION_STORAGE,REQUEST_PERMISSION_CODE); 6.2 文件存儲最后在清單文件中添加權限:6.3 SharedPreferences存儲SharedPreferences是Android平臺上一個輕量級存儲類,也是最容易理解和使用的存儲技術。主要用來存儲程序的配置參數,例如用戶名、密碼、自定義參數的設置。區別于文件的存儲方式,SharedPref
10、erences是使用鍵值對的方式將數據存儲到XML文件中來保存數據的。該文件位于data/data/shared_prefs文件夾中。SharedPreferences支持多種不同數據類型存儲,包括Float、Int、Long、Boolean、String、StringSet類型。6.3 SharedPreferences存儲6.3.1 將數據存儲到SharedPreferences中Android中提供了3種方法用于得到SharedPreferences對象:Context類中的getSharedPreferences()方法Activity類中的getPreferences()方法Pref
11、erenceManager類中的getDefaultSharedPreferences()方法將數據存儲到SharedPreferences文件中:SharedPreferences.Editor editor = getSharedPreferences(data,MODE_PRIVATE).edit(); editor.putString(name,Tom); editor.putInt(age,28); editor.putBoolean(married,false); editor.apply();6.3 SharedPreferences存儲6.3.2從SharedPreferenc
12、es中讀取數據SharedPreferences對象中提供了一系列的get方法,用于讀取數據;每種get方法都對應了SharedPreferences.Editor中的一種put方法;get方法都要接收兩個參數,第一個參數是鍵,即存儲對應數據時使用的鍵值;第二個參數是默認值,表示當傳入的鍵值找不到對應值時會以什么樣的默認值返回。 SharedPreferences pref = getSharedPreferences(data,MODE_PRIVATE); String name = pref.getString(name,); int age = pref.getInt(age,0); b
13、oolean married = pref.getBoolean(married,false); String info = name is : +name+n+age is :+age+ n +married is :+married;6.3 SharedPreferences存儲6.3.3 實戰演練23功能描述:技術要點:編輯布局編輯邏輯代碼,用來記住配置文件使用SharedPreferences技術實現了記住密碼功能案例代碼(詳見教材P132P135)實現步驟: 實現記住密碼功能使用SharedPreferences存儲配置信息,通過SharedPreferences讀取存儲的配置信息。
14、16.4 SQLite數據庫存儲Android系統提供了SQLite數據庫,可以用來存儲大量的數據并對數據進行管理和維護。SQLite是一款輕量級的關系型數據庫,運算速度非常快,占用資源很少,通常只需要幾百KB的內存就足夠,因此適合在移動設備上使用。SQLite不僅支持標準的SQL語法,還遵循數據庫的ACID事務,只要之前使用過其他關系型數據庫,就可以很快上手SQLite,且SQLite比一般的數據庫要簡單的多,它不需要設置用戶名和密碼就可以使用。它還能夠支持Windows/Linux/UNIX等主流操作系統,能夠跟很多程序語言,例如Tcl、C#、PHP、Java等結合。6.4 SQLite數
15、據庫存儲SQLite沒有服務器進程,通過文件保存數據,該文件是跨平臺的,可以放在其他平臺中使用。保存數據時,支持null(零)、integer(整數)、real(浮點數字)、text(字符串文本)和blob(二進制對象)5種數據類型,同時還接收varchar(n)、char(n)、decimal(p,s)等數據類型,但是在運算或保存的時候會轉換成對應的5種數據類型。6.4 SQLite數據庫存儲6.4.1 創建數據庫Android為了讓我們能夠更加方便的管理數據庫,專門提供了一個SQLiteOpenHelper數據庫幫助類,借助這個類可以簡單對數據庫進行創建和升級。 SQLiteOpenHel
16、per是一個抽象類,因此我們要使用的話需要創建自己的幫助類去繼承它SQLiteOpenHelper中還有兩個非常重要的實例方法:getReadableDatabase()和getWrit-ableDatabase()6.4 SQLite數據庫存儲在新建的項目中創建MyDatabaseHelper類繼承自SQLiteOpenHelper類,重寫抽象方法并在構造方法中創建數據表Studentpublic class MyDatabaseHelper extends SQLiteOpenHelper public static final String CREATE_STUDENT= create
17、table Student ( + id integer primary key autoincrement, /主鍵自增長 + stuName text, /學生姓名 文本類型 + stuNo text, /學號 文本類型 + stuAge integer, /年齡 + stuMajor text); /專業 private Context mContext; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) super(contex
18、t, name, factory, version); mContext = context; Override public void onCreate(SQLiteDatabase db) db.execSQL(CREATE_STUDENT); Toast.makeText(mContext, 恭喜數據庫創建成功!, Toast.LENGTH_SHORT).show(); Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 6.4 SQLite數據庫存儲6.4.2 升級數據庫My
19、DatabaseHelper中還有一個方法onUpgrade(),這個方法主要完成數據庫的升級操作例如現在如果我們需要添加一張表用于記錄圖書分類:首先確定創建表Category的SQL語句接下來,我們將上述語句添加到剛才創建的自定義幫助類MyDatabaseHelper中create table Category (id integer primary key autoincrement,category_name text,category_code integer)6.4 SQLite數據庫存儲public class MyDatabaseHelper extends SQLiteOpen
20、Helper Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL(drop table if exists Student); db.execSQL(drop table if exists Category); onCreate(db); onUpgrade()方法中執行了兩條drop語句,表示如果數據庫中存在Student表或Category表則將這兩張表刪除,然后調用onCreate()方法重新創建。6.4 SQLite數據庫存儲6.4.3 添加數據調用S
21、QLiteOpenHelper的getReadableDatabase()和getWritableDatabase()方法可以用于創建和升級數據庫,同時,這兩個方法還會返回一個SQLiteDatabase對象,借助這個對象,我們可以完成數據庫的增、刪、查操作。 public void onClick(View v) SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); / 開始組裝第一條數據 values.put(stuName, Lucy Wang); v
22、alues.put(stuNo, 0201170101); values.put(stuAge, 18); values.put(stuMajor, Software Engineering); db.insert(Student, null, values); / 插入第一條數據 values.clear(); 6.4 SQLite數據庫存儲6.4.4 更新數據SQLiteDatabase數據庫提供了一個好用的方法uodate(),用于對數據進行更新,這個方法接收4個參數,第一個參數和前面insert()方法一樣,表示要更新哪張表中的數據。第二個參數是ContentValues對象,要把更新
23、數據組裝進去。第三、第四個參數用于約束更新某一行或某幾行的數據,不指定時指更新所有行。 Override public void onClick(View v) SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(stuMajor, Software Engineering); db.update(Student, values, stuName = ?, new String Jone Dou ); 6.4 SQLite數據庫存儲6
24、.4.5 刪除數據接下來我們通過學習SQLiteDatabase的delete()方法學習如何從數據庫中刪除數據,這個方法很簡單,在方法中只接受3個參數,第一個參數仍然是表名,第二、第三個參數用來指明刪除某一行或某幾行的數據,不指定默認情況下就是刪除所有行。 Override public void onClick(View v) SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete(Student, stuAge ?, new String 18 ); 6.4 SQLite數據庫存儲6.4.6 查詢數據數據庫中SQL查詢涉及的內容很多,SQLiteDatabase中提供了一個query()方法用于對數據進行查詢,這個方法中最短的方法重載需要傳入7個參數。Override public void onClick(View v) SQLiteDatabase db = dbHelper.getWritableDatabase(); / 查詢Book表中所有的數據 Cursor cursor = db.query(Student, null, null
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 籃球球場整修方案范本
- 河道清淤采砂施工方案
- 重慶科技學院《大學英語Ⅲ》2023-2024學年第二學期期末試卷
- 水泥構件銷售方案范本
- 鎮江市高等專科學校《中學數學現代教育技術》2023-2024學年第二學期期末試卷
- 山東藝術學院《實證會計研究入門》2023-2024學年第二學期期末試卷
- 寧波大學科學技術學院《藥劑學Ⅱ》2023-2024學年第二學期期末試卷
- 廊坊師范學院《植物生殖生物學》2023-2024學年第二學期期末試卷
- 中南林業科技大學《葡萄與葡萄酒》2023-2024學年第二學期期末試卷
- 江蘇衛生健康職業學院《制圖》2023-2024學年第二學期期末試卷
- 國企外聘合同范本
- 大學生職業素養(職業素養指導課程)全套教學課件
- 醫院培訓課件:《血管超聲在通路中的應用》
- 2024年職業技能測試題庫500道附答案【黃金題型】
- 吊籃安裝計算書
- 復習-Python初中信息技術
- 35KV電纜入地綜合項目工程綜合項目施工組織設計
- 園林工程課件
- 中國MEMS流量傳感器行業市場現狀分析及競爭格局與投資發展研究報告2024-2029版
- 癌癥患者的放療護理與副作用管理
- 2021年面試評估表及評估標準
評論
0/150
提交評論