上一篇Android數(shù)據(jù)存儲(一)講的是Android的文件存儲钞螟,利用的是Java的IO流對數(shù)據(jù)進(jìn)行存儲鸵赫。這篇講的是利用SharedPreferences對數(shù)據(jù)進(jìn)行存儲。
將數(shù)據(jù)存儲到SharedPreferences中
與文件存儲的方式不同,SharedPreferences是通過鍵值對的方式對數(shù)據(jù)進(jìn)行存儲的室抽。而且SharedPreferences還支持多種不同的數(shù)據(jù)類型的存儲,如果存儲的數(shù)據(jù)類型是字符串靡努,那么取出來的數(shù)據(jù)就是字符串類型的坪圾。
使用SharedPreferences來存儲數(shù)據(jù),首先需要獲得到SharedPreferences對象惑朦。Android主要提供了三種方法用于得到SharedPreferences對象兽泄。
1.Context類中的getSharedPreferences()方法
此方法接收兩個參數(shù),第一個參數(shù)用于指定SharedPreferences文件的名稱漾月,如果文件不存在的話就會創(chuàng)建一個病梢,如果文件已經(jīng)存在則會覆蓋原來的文件。SharedPreferences文件都是存放在/data/data/<package name>/shared_prefs/目錄下的栅屏。第二個參數(shù)用于指定操作模式飘千,主要有兩種操作模式可以選堂鲜,MODE_PRIVATE和MODE_MULTI_PROCESS。
- MODE_PRIVATE依然是默認(rèn)的操作模式护奈,和傳入0效果相同缔莲,表示只有當(dāng)前應(yīng)用程序可以對這個SharedPreferences文件進(jìn)行讀寫操作。
- MODE_MULTI_PROCESS用于有多個進(jìn)程對同一個SharedPreferences文件進(jìn)行讀寫操作的情況霉旗。
2.Activity類中的getPreferences()方法
這個方法與Context中的getSharedPreferences()方法很相似痴奏,不過它只接收一個操作模式參數(shù),使用這個方法會自動將當(dāng)前Activity的類名作為SharedPreferences的文件名厌秒。
3.PreferenceManager類中的getDefaultSharedPreferences()方法
這是一個靜態(tài)方法读拆,它接收一個Context參數(shù),并自動使用當(dāng)前應(yīng)用程序的包名作為前綴來命名SharedPreferences文件鸵闪。
向SharedPreferences文件存儲數(shù)據(jù)的步驟
1.調(diào)用 SharedPreferences 對象的 edit()方法來獲取一個 SharedPreferences.Editor 對象檐晕。
2.向 SharedPreferences.Editor 對象中添加數(shù)據(jù),比如添加一個布爾型數(shù)據(jù)就使用
putBoolean 方法蚌讼,添加一個字符串則使用 putString()方法辟灰,以此類推。
3.調(diào)用 commit()方法將添加的數(shù)據(jù)提交篡石,從而完成數(shù)據(jù)存儲操作芥喇。
從SharedPreferences文件中讀取數(shù)據(jù)
從文件中讀取數(shù)據(jù)的方法同樣十分簡單, SharedPreferences 對象中提供了一系列的get方法用于對存儲的數(shù)據(jù)進(jìn)行讀取凰萨, 每種get方法都對應(yīng)了SharedPreferences.Editor 中的一種 put 方法继控,比如讀取一個布爾型數(shù)據(jù)就使用 getBoolean()方法,讀取一個字符串就使用 getString()方法胖眷。這些 get 方法都接收兩個參數(shù)武通,第一個參數(shù)是鍵,傳入存儲數(shù)據(jù)時使用的鍵就可以得到相應(yīng)的值了瘦材,第二個參數(shù)是默認(rèn)值厅须,即表示當(dāng)傳入的鍵找不到對應(yīng)的值時,會以什么樣的默認(rèn)值進(jìn)行返回食棕。
Demo
創(chuàng)建一個SharedPreferencesTest項目,在布局文件中添加兩個按鈕错沽,一個用于存儲數(shù)據(jù)簿晓,另一個用于讀取數(shù)據(jù)。然后編寫MainActivity的代碼千埃。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button saveData;
private Button restoreData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
saveData.setOnClickListener(this);
restoreData = (Button) findViewById(R.id.restore_data);
restoreData.setOnClickListener(this);
}
@Override
public void onClick(View v) {
SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
// SharedPreferences preferences = getPreferences(MODE_PRIVATE);
// SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
switch (v.getId()) {
case R.id.save_data:
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name", "feiben");
editor.putInt("age", 22);
editor.putBoolean("married", false);
editor.commit();
break;
case R.id.restore_data:
String name = preferences.getString("name", "");
int age = preferences.getInt("age", 0);
boolean married = preferences.getBoolean("married", false);
Log.i("MainActivity", "name is " + name);
Log.i("MainActivity", "age is " + age);
Log.i("MainActivity", "married is " + married);
break;
default:
break;
}
}
}
在按下Sava data時得到SharedPreferences對象憔儿,再通過SharedPreferences.Editor將數(shù)據(jù)保存到SharedPreferences文件中。
在按下Restore data時將數(shù)據(jù)從SharedPreferences文件中取出放可,并打印到控制臺谒臼。
在Android Device Monitor中可以看到所生成的SharedPreferences文件保存在shared_prefs目錄下朝刊,并且是以xml格式保存數(shù)據(jù)的。文件夾中有三個不同的文件是因為我使用了不同的方法去獲取SharedPreferences對象蜈缤。
將data復(fù)制到電腦上拾氓,使用記事本打開可以看到里面的內(nèi)容如下〉赘纾可以看出于文件存儲有非常明顯的差別咙鞍,文件存儲并沒有對我們的數(shù)據(jù)進(jìn)行任何處理,而SharedPreferences存儲數(shù)據(jù)會對我們的數(shù)據(jù)用xml格式進(jìn)行格式化趾徽。
這篇文章就先到這里续滋,下一篇文章Android登陸頁面記住密碼以及強(qiáng)制下線功能的實現(xiàn)將介紹通過廣播以及SharedPreferences來做一個記住賬號密碼功能以及強(qiáng)制下線功能的Demo。由于本人水平有限孵奶,如有錯誤疲酌,歡迎大家指正。共同學(xué)習(xí)進(jìn)步了袁!