Android中的五種數據存儲方式


數據存儲在開發中是使用最頻繁的,在這里主要介紹Android平台中實現數據存儲的5種方式,分別是:

1 使用SharedPreferences存儲數據
2 文件存儲數據
3 SQLite數據庫存儲數據
4 使用ContentProvider存儲數據
5 網絡存儲數據
 
 
①SharedPreferences
SharedPreferences是Android平台下輕量級的存儲類,主要保存一些常用的配置如窗口狀態。
它的本質是基於XML文件存儲key-value鍵值對數據,通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data/包名/shared_prefs目錄下。
SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過Editor對象實現。
 
實現SharedPreferences存儲的步驟如下:
一、根據Context獲取SharedPreferences對象
SharedPreferences sp=getSharedPreferences("SP",MODE_PRIVATE);
二、利用edit()方法獲取Editor對象。
Editor editor=sp.edit();
三、通過Editor對象存儲key-value鍵值對數據。
editor.putString("STRING_KEY","string");
editor.putInt("INT_KEY",0);
editor.putBoolean("BOOLEAN_KEY",true);
四、通過commit()方法提交數據
editor.commit();
 
SharedPreferences存儲對比SQLite儲存,免去了創建數據庫,創建表,寫SQL語句等操作,但是其只能儲存boolean,int,float,long,string5種數據類型,無法進行條件查詢,所以說到底,它也是一種簡單的存儲方式補充,而無法完全替代SQLite。
 
②文件存儲數據
關於文件存儲,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
文件可用來存放大量數據,如文本、圖片、音頻等。
默認位置:/data/data/包名/files/***.***。
 
openFileOutput()指定兩個參數,第一個參數是指定文件名稱,不能包含路徑分隔符"/",如果文件不存在,則自動創建。
第二個參數指定操作模式,有四種操作模式,分別是:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
 
Context.MODE_PRIVATE是默認操作,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,
Context.MODE_APPEND是追加模式,首先檢查文件存不存在,存在就往文件里追加,不存在就創建。
Context.MODE_WORLD_READABLE代表當前文件可被其他應用讀取。
Context.MODE_WORLD_WRITEABLE代表當前文件可被其他應用寫入。
 
寫入的代碼:
FileOutputStream fos=
openFileOutput("test.txt",Context.MODE_APPEND);
fos.write(text.getText().toString());
fos.close();

 

讀取的代碼:

FileInputStream fis=openFileInput("test.txt");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=fis.read(buffer)!=-1){
           stream.write(buffer,0,length);    
}
stream.close();
fis.close();

 

*往SD卡中存儲文件
獲取SD卡的狀態:​Environment.getExternalStorageState(),如果手機有SD卡且可以讀寫,則返回Environment.MEDIA_MOUNTED。
獲取SD卡的目錄:Environment.getExternalStorageDirectory()。
 
通常的代碼為:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNT)){
      File sdCardDir=Environment.getExternalStorageDireactory();
      File saveFile=new File(sdCardDir,"a.txt");
      FileOutputStream fos=new FileOutputStream(saveFile); 
      fos.write("test".getBytes());
      fos.close();
}

 

 
③SQLite數據庫存儲數據
SQLite是輕量級嵌入式數據庫引擎,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。
數據庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQLite 數據庫 Activites 可以通過 Content Provider 或者 Service 訪問一個數據庫。
Android 提供了 SQLiteOpenHelper 幫助你創建一個數據庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建數據庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新數據庫使用的邏輯。
 
SQLiteOpenHelper 的子類,至少需要實現三個方法:
1.構造方法
調用父類SQLiteOpenHelper的構造函數。該方法需要四個函數,分別是上下文Context,數據庫名,游標工廠(通常為null),還有一個代表版本號的version。
2.onCreate()
在此方法中我們需要創建表和初始化數據。
如:CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL)
3.onUpGrage()
升級數據庫時調用的方法。需要三個參數,分別是SQLiteDatabase對象,舊的版本號,新的版本號。
 
*使用SQLite對數據進行操作
們通過SQLiteOpenHelper的getReadableDatabase或getWriteableDatabase獲得了可寫或可讀的數據庫后
insert():可以通過insert()進行插入操作,接收三個參數,分別是表名,第二個參數代表未指定添加數據的情況下可為空的列賦值為null,我們在這里一般填null就可,第三個是ContentValues,它提供一系列的put(),供我們往里面填充數據。
SQLiteDatabase db=dbHelper.getWriteableDatabase();
ContentValues values=new ContentValues();
values.put("name","string");
values.put("page",23);
values.put("price",55.85);
db.insert("Book",null,values);

 

update():更新的操作。接收四個參數,分別是表名,ContentValues,指定哪一行,相應的填充指定哪一行的數組。
SQLiteDatabase db=dbHelper.getWriteableDatabase();
ContentValues values=new ContentValues();
values.put("page",33);
db.update("Book",values,"name=?",new String[]{"23"});

 

delete():刪除操作。接收三個參數,第一個為表名,第二個為指定哪一行,第三個為相應的填充哪一行的數據。

SQLiteDatabase db=dbHelper.getWriteableDatabase();
db.delete("Book","page>?",new String[]{50});

 

query():查詢操作。至少要傳入七個參數。分別是表名tablename,列名columns,where的約束條件selection,為where占位符提供數據的selectionArgs,需要group by的列,group by后進一步約束的having,還有對結果進行排序的orderBy,最后返回一個Cursor對象,我們可以從中獲取到相應的數據。

SQLiteDatabase db=dbHelper.getReadableDatabase();
//把頁數大於20的篩選出來
Cursor cursor=db.query("Book","page>?",new String[]{20},null,null,null,null);
if(cursor!=null){
        String name=cursor.getString(cursor.getColumnIndex("name"));  
        ...
        
}
cursor.close();

 

④CotentProvider存儲數據
詳見ContentProvider介紹。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM