Hi,大家好!
今天,主要學習Android的資料存放區機制,主要分為四種方式,今天我們先來介紹,Shared Preferences、 Files、NetWork,下節我們介紹SQLite方式。
照例,輕鬆下:
IT廁所的遭遇
一日,去逛電腦城,突然覺得一陣腹痛。不好,要如廁。
急匆匆來到WC前,抬頭只見門口上方掛一電子牌,上寫:“最新windows vista server WC”
不禁讚歎:果然是IT,高科技!
好急,快進去,怎麼門推不開?
抬頭一看,電子板上顯示:“使用者名稱不存在或密碼錯誤,請找管理員”。
給看門老頭交了兩毛錢,拿了個密碼,急忙入內,沖向馬桶。可是馬桶蓋怎麼也打不開,我實在忍不住了,用力一拉,牆上彈出一塊牌 子:“系統提示:您沒有這個馬桶的存取權限!”好在我知道一個超級使用者密碼,在控制台中輸入後,馬桶蓋終於開啟了。長舒了一口氣,好舒服哦!
完事,伸手去拿手紙,手紙卻又沒法從盒子裡抽出來,不會吧,難道……
一轉頭,果然,又彈出了一個牌子:“此紙盒已加密!”
我暈,正在急不可耐時,旁邊蹲位有人伸過來一隻手:“你第一次用windows vista server WC吧,沒關係,我們手紙共用好了。”
“謝謝,謝謝。”邊道謝,我邊提好褲子。
一衝馬桶,又彈一牌子:“病毒已清除!”
剛走兩步,只聽“砰”的一聲,馬桶蓋大力地關上了,牌子上道:“連線逾時,請重新整理!”
好險!
Shared Preferences
1. 什麼是 Shared Preferences?
2. 如何使用 Shared Preferences 儲存資料?
3. 如何使用 Shared Preferences 獲得資料?
1. Shared Preferences 類似於winform中做一些小型配置的ini檔案,用來儲存一些使用者佈建的參數。例如,可以通過它儲存上一次使用者所做的修改或者自訂參數設定,當再次啟動程式後依然保持原有設定。
用來儲存“鍵-值”對的格式資料。是一個輕量級的索引值對儲存機制,只可以儲存基礎資料型別 (Elementary Data Type)。
2. 首先,需要獲得SharedPreferences對象,通過
SharedPreferences sharedPre=getPreferences(Activity.MODE_PRIVATE);
通過SharedPreferences.edit()函數獲得編輯對象,就可以寫資料了
儲存資料的代碼如下:
建立一個全域變數s
private String sfKey = "isplay";
/**
* Activity.MODE_PRIVATE,//預設操作模式,代表該檔案是私人資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容,如果想把新寫入的內容追加到原檔案中,可以使用Activity.MODE_APPEND
Activity.MODE_WORLD_READABLE,//表示當前檔案可以被其他應用讀取,
Activity.MODE_WORLD_WRITEABLE,//表示當前檔案可以被其他應用寫入;
//如果希望檔案被其他應用讀和寫,可以傳入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
Activity.MODE_APPEND//該模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案
*/
@Override
public void onClick(View v) {
//獲得SharedPreferences對象
SharedPreferences sharedPre=getPreferences(Activity.MODE_PRIVATE);
//SharedPreferences sharedPre=getSharedPreferences("aaa",Activity.MODE_PRIVATE);
//擷取SharedPreferences的編輯對象
SharedPreferences.Editor editor=sharedPre.edit();
if(rb0.isChecked())
editor.putBoolean(sfKey, true);//添加儲存資料 索引值對格式
else
editor.putBoolean(sfKey, false);
editor.commit(); //儲存資料
Toast.makeText(this, "儲存成功", Toast.LENGTH_SHORT).show();
}
3. 擷取資料代碼如下:
SharedPreferences sharedPre=getPreferences(Activity.MODE_PRIVATE);
//第一個參數 表示,要建立的檔案名稱 將建立一個aaa.xml
//SharedPreferences sharedPre=getSharedPreferences("aaa",Activity.MODE_PRIVATE);
if( sharedPre.getBoolean(sfKey, false))
rb0.setChecked(true);
else
rb1.setChecked(true);
在一個應用程式的不同Activity之間共用變數,使用getSharedPreferences(),如果只是想儲存一個活動的狀態,而不需要和其他活動共用,則可以使用Activity.getPreference()。
getPreferences()只需要一個mode參數,而getSharedPreferences()還需要另外指定名稱。
SharedPreferences 的四種儲存許可權
Activity.MODE_PRIVATE,//預設操作模式,代表該檔案是私人資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容,如果想把新寫入的內容追加到原檔案中,可以使用Activity.MODE_APPEND
Activity.MODE_WORLD_READABLE,//表示當前檔案可以被其他應用讀取
Activity.MODE_WORLD_WRITEABLE,//表示當前檔案可以被其他應用寫入;
Activity.MODE_APPEND//該模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案
//如果希望檔案被其他應用讀和寫,可以傳入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
查看 Preferences 產生的檔案(選中當前檔案,匯出這個檔案,大家可以看下儲存的資料其實就是一個XML節點)
大家可以做個練習,如,來鞏固當前所學
Files
1. 什麼是 Files 資料存放區
2. 什麼是 Properties ?
3. 如何儲存資料
4. 如何擷取資料
1. File 就是把需要儲存的東西通過檔案的形式訊錄下來,當需要這些資料時,通過讀取這個檔案來擷取這些資料。因為 Android 採用了 Linux 核心,所以在Android 系統中,檔案也是Linux 的形式。
Android 中可以在裝置本身的的儲存或者外接的存放裝置中建立用於儲存資料的檔案。同時,在預設狀態下,檔案是不能在不同的程式間共用的。
2. Properties(屬性),可以把Properties繼承自Hashtable,理解成一個Hashtable ,不過唯一不同的是,Properties對應的“鍵-值”必須是字串形式的資料類型。Files 資料存放區主要是使用 Properties 配合 FileInputStream或者FileOutputStream對檔案寫入操作。
3. 儲存資料代碼如下:
建立全域變數
private String sfKey = "isplay";
public boolean save()
{
Properties properties =new Properties();
if(rb0.isChecked())
properties.put(sfKey,String.valueOf(true)); //儲存的鍵-值必須是字串形式
else
properties.put(sfKey, String.valueOf(false));
try {
//儲存的檔案格式 可以使用Linux的檔案類型,也可以使用Windows的檔案類型
//FileOutputStream 檔案寫入流
FileOutputStream stream=this.openFileOutput("FilesData.cfg", Context.MODE_PRIVATE);
properties.store(stream, "");
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
return false;
}
return true;
}
4. 擷取資料代碼如下:
public void load()
{
Properties properties=new Properties();
try {
FileInputStream stream =this.openFileInput("FilesData.cfg");
properties.load(stream);//代碼中有對properties對象方法的解釋,自己去看
//可以通過properties.getProperty()擷取需要的Value
boolean result =Boolean.valueOf(properties.getProperty(sfKey));
if(result)
rb0.setChecked(true);
else
rb1.setChecked(true);
} catch (Exception e) {
// TODO: handle exception
}
}
常用方法
/*公用方法
* •傳回值:String
方法:getProperty(String name, String defaultValue)
解釋:通過指定的 “name“ 即Key,搜尋屬性,參數二為預設值,即通過Key找不到檔案中的屬性時,要返回的預設值。
•傳回值:String
方法:getProperty(String name)
解釋:通過指定的 ”name“ 即為 Key,搜尋屬性,沒有返回預設值。
•無傳回值:void
方法:list(PrintStream out)
解釋:通過PrintStream 列出可讀的屬性列表
•無傳回值:void
方法:list(PrintWriter writer)
解釋:通過PrintStream 列出可寫的屬性列表
•無傳回值:synchronized void
方法:load(InputStream in)
解釋:從指定的 ”inputStream “ 即輸出資料流,載入properties
•無傳回值:synchronized void
方法:loadFromXML(InputStream in)
解釋:從指定的 "InputStream" 即輸出資料流,載入一個以XML形式的 Properties
•傳回值:Enumeration<?>
方法:propertyNames()
解釋:返回所有包含在檔案裡面的屬性名稱
•無傳回值:void
方法:save(OutputStream out, String comment)
解釋:注意,這種儲存方法己經過時,Google 不推薦使用此種寫法,這種方法忽略任何IO 異常,所以在實際操作過程中,可能會發生不必要的異常。
•傳回值:object
方法:setProperty(String name, String value)
解釋:設定屬性,儲存一個”鍵-值“對的屬性。
•無傳回值:synchronized void
方法:store(OutputStream out, String comment)
解釋:通過 FileOutputStream 開啟對應的程式檔案,然後通過Store 儲存之前 Properties 打包好的資料。這裡備忘可以為空白。
•無傳回值:void
方法:storeToXML(OutputStream os, String comment)
解釋:通過FileOutputStream 開啟對應的程式檔案,將打包好的資料寫入到XML檔案。
•無傳回值:synchronized void
方法:storeToXML(OutputStream os, String comment, String encoding)
解釋:通過FileOutputStream 開啟對應的程式檔案,將打包好的資料寫入到XML檔案,第三個參數可以指定編碼。
* */
查看產生的File檔案
NetWork
通過這種方式儲存資料,相對來說會比較繁瑣,也不實用,在開發中不會使用這種方式,所以不推薦大家使用,如果大家有興趣,可以去搜尋下相關資料,瞭解瞭解。
代碼以上傳至北京天聖達科技公司,歡迎大家下載