android之SharedPreferences
簡介 將資料存放區到SharedPreferences中 擷取SharedPreferences對象 Context類中的getSharedPreferences方法 檔案位置 Activity類中的getPreferences方法 PreferenceManager類中的getDefaultSharedPreferences方法 向SharedPreferences檔案中儲存資料 從SharedPreferences中讀取資料 結果示範
簡介
SharedPreferences是資料存放區方案中持久化技術之一(其它還有檔案儲存體,資料庫儲存等),它是一個輕量級的儲存類,特別適合用於儲存軟體配置參數或者儲存臨時資料。使用 SharedPreferences儲存資料,其背後是用xml檔案(索引值對)存放資料,,它存放在檔案系統中的/data/data//shared_prefs目錄下。
將資料存放區到SharedPreferences中擷取SharedPreferences對象
要想使用SharedPreferences來儲存資料,首先需要擷取SharedPreferences對象,有下列三個方法:
Context類中的getSharedPreferences()方法
getSharedPreferences()接收兩個參數:第一個參數用於指定檔案的名稱(若不存在則自動建立,無需加尾碼,系統自動加),第二個參數指定檔案的操作模式,主要有兩種模式:MODE_PRIVATE和MODE_MULTI_PROCESS,MODE_PRIVATE和直接傳入0效果一樣,表示只有當前的應用程式才可以對該SharedPreferences檔案進行讀寫;MODE_MULTI_PROCESS則一般用於多個進程對同一個SharedPreferences檔案進行讀寫的情況。其實還有另兩種,但是已在Android4.2版本之後被棄用,不多介紹。簡單代碼如下:
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(sywyg,0);
註:
通過這種方法獲得的SharedPreferences對象能被同一個應用中的所有Activity訪問 檔案儲存為xml類型檔案位置
通過 android studio中工具列上的綠色android機器人開啟DDMS(eclipse中好像直接寫著DDMS呢)可以查看sd卡檔案(File Explorer),我的SharedPreferences檔案存放在:/data/data/com.sywyg.intent_test/shared_prefs/名字為sywyg.xml。匯出xml檔案開啟之後內容如下:
sywyg
可以看到SharedPreferences就是通過索引值對儲存資料的。
Activity類中的getPreferences()方法
第二種擷取SharedPreferences對象的方法:Activity類中的getPreferences()方法。該方法只接受一個模式參數,而檔案名稱自動為當前Activity的類名。簡單代碼如下:
SharedPreferences sharedPreferences2 = this.getPreferences(0);
通過這種方式建立的SharedPreferences檔案存放的位置不變,而xml名稱為:MainActivity.xml,內容如下:
sywyg
註:
通過這種方法獲得的SharedPreferences對象,若其它Activity想獲得該SharedPreferences檔案,則只能通過Context類中的getSharedPreferences()方法擷取SharedPreferences對象,當然檔案名稱必須是該SharedPreferences檔案名稱。PreferenceManager類中的getDefaultSharedPreferences()方法
該方法為靜態方法,只有一個Context參數,並自動使用當前應用程式的包名作為首碼來命名SharedPreferences檔案。簡單代碼如下:
SharedPreferences sharedPreferences3 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
通過這種方式建立的SharedPreferences檔案存放的位置不變,而xml名稱為:com.sywyg.intent_test_preferences.xml,內容如下:
sywyg
向SharedPreferences檔案中儲存資料
擷取SharedPreferences對象之後,就可以向SharedPreferences檔案儲存資料了,由下列三步實現:
調用SharedPreferences對象的edit()方法來擷取一個SharedPreferences.Editor(內部類)對象; 通過putXXX()方法向Editor對象中添加資料; 調用commit()方法提交資料,完成資料存放區操作。
註:
一般在onPause()方法中儲存資料。
具體代碼如下:
@Overrideprotected void onPause(){ super.onPause(); SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(sywyg,0); //SharedPreferences sharedPreferences = this.getPreferences(0); //SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(name,sywyg); editor.putLong(id,1); editor.commit();}
註:
通過putXXX()方法儲存的資料類型只能是:String,int,boolean,long,float;還可以是String集合。從SharedPreferences中讀取資料
通過SharedPreferences對象的getXXX()可以擷取對應的資料,getXXX()方法接收兩個參數,第一個參數是鍵(存資料時使用的鍵名),第二個參數為預設值,即當找不到對應的鍵時返回該值。
代碼如下:
@Overrideprotected void onResume(){ super.onResume(); SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(sywyg,0); String name = sharedPreferences.getString(name,); long id = sharedPreferences.getLong(id,0); Toast.makeText(this,name: + name + ,id: + id,Toast.LENGTH_LONG).show(); SharedPreferences.Editor editor = sharedPreferences.edit(); //清除SharedPreferences檔案中的內容 editor.clear(); editor.commit();}
結果示範