標籤:android style blog io color ar 使用 for sp
SharedPreferences的使用
有些時候,應用程式有少量的資料需要儲存,而且這些資料的格式很簡單:都是普通的字串、標量類型的值等,比如應用程式的各種配置資訊(如是否開啟音效、是否使用震動效果等)、小遊戲的玩家積分(如掃雷英雄榜之類的)等,對於這種資料,Android提供了SharedPreferences進行儲存。
SharedPreferences與Editor簡介
SharedPreferences儲存的資料主要是類似於配置資訊格式的資料,因此它儲存的資料主要是簡單類型的key-value對。
SharedPreferences介面主要負責讀取應用程式的Preferences資料,它提供了如下常用方法訪問SharedPreferences中的key-value對。
- boolean contains(String key):判斷SharedPreferences是否包含特定key的資料。
- abstract Map<String,?> getAll():擷取SharedPreferences資料裡全部的key-value對。
- boolean getXxx(String key,xxx defaultValue):擷取SharedPreferences資料裡指定key對應的value。如果該key不存在,返回預設值defaultValue。其中xxx可以是boolean、float、int、long、String等各種基本類型的值。
SharedPreferences介面本身並沒有提供寫入資料的能力,而是通過SharedPreferences的內部介面,SharedPreferences調用edit()方法即可擷取它所對應的Editor對象。Editor提供了如下方法來向SharedPreferences寫入資料。
- SharedPreferences.Editor clear():清空SharedPreferences裡的所有資料。
- SharedPreferences.Editor putXxx(String key,xxx value):向SharedPreferences存入指定key對應的資料。其中xxx可以是boolean、float、int、long、String等各種基本類型的值。
- SharedPreferences.Editor remove(String key):刪除SharePreferences裡指定key對應的資料項目。
- boolean commit():當Editor編輯完成後,調用該方法提交修改。
SharedPreferences 本身是一個介面,程式無法直接建立SharedPreference執行個體,只能通過Context提供的getSharedPreferences(String name,int mode)方法來擷取SharedPrefereces執行個體,該方法的第二個參數(mode)支援如下幾個值。
- Context.MODE_PRIVATE:指定該SharedPreferences資料只能被本應用程式讀、寫。
- Context.MODE_WORLD_READABLE:指定該SharedPreferences資料能被其他應用程式讀,但不能寫。
- Context.MODE_WORLD_WRITEABLE:指定該SharedPreferences資料能被其他應用程式讀、寫。
執行個體
執行個體向SharedPreferences中寫入、讀取資料,該程式的介面很簡單,它只是提供兩個按鈕,其中一個寫資料,另一個用於讀取資料。布局檔案比較簡單,就不貼出來了。
public class SharePreferencesActivity extends Activity { SharedPreferences preferences; SharedPreferences.Editor editor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share_preferences); //擷取只能被本應用程式讀、寫的SharedPreferences對象 preferences=getSharedPreferences("crazyit", MODE_PRIVATE); editor=preferences.edit(); Button read=(Button)findViewById(R.id.read); Button write=(Button)findViewById(R.id.write); read.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 讀取字串資料 String time=preferences.getString("time", null); //讀取int類型的資料 int randNum=preferences.getInt("random", 0); String result=time==null?"你暫時還未寫入資料":"寫入時間為: " +time+"\n上次產生的隨機數為: "+randNum; //使用Toast提示資訊 Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }); write.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub SimpleDateFormat adf=new SimpleDateFormat("yyyy年MM月dd月 " +"hh:mm:ss"); //存入目前時間 editor.putString("time", adf.format(new Date())); editor.putInt("random", (int)(Math.random()*100)); //提交所有存入的資料 editor.commit(); } }); }}
在/data/data/com.hutao.sharedpreference/shared_prefs/有一個crazyit.xml檔案。開啟該XML文檔可以看到檔案內容:
<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?><map><int name="random" value="30" /><string name="time">2014年11月03月 03:29:23</string></map>
參考資料:
《Android 瘋狂講義》
Android 的資料存放區——SharePreferences