Android數(shù)據(jù)存儲(二)

上一篇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文件中取出放可,并打印到控制臺谒臼。

Log日志

在Android Device Monitor中可以看到所生成的SharedPreferences文件保存在shared_prefs目錄下朝刊,并且是以xml格式保存數(shù)據(jù)的。文件夾中有三個不同的文件是因為我使用了不同的方法去獲取SharedPreferences對象蜈缤。
1917079-3302e91c61a994b7.png

將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)步了袁!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末徐勃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子早像,更是在濱河造成了極大的恐慌僻肖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卢鹦,死亡現(xiàn)場離奇詭異臀脏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冀自,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門揉稚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熬粗,你說我怎么就攤上這事搀玖。” “怎么了驻呐?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵灌诅,是天一觀的道長。 經(jīng)常有香客問我含末,道長猜拾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任佣盒,我火速辦了婚禮挎袜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己盯仪,他們只是感情好紊搪,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著全景,像睡著了一般耀石。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚪燕,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天娶牌,我揣著相機(jī)與錄音,去河邊找鬼馆纳。 笑死诗良,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲁驶。 我是一名探鬼主播鉴裹,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钥弯!你這毒婦竟也來了径荔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脆霎,失蹤者是張志新(化名)和其女友劉穎总处,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睛蛛,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鹦马,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆肾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荸频。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖客冈,靈堂內(nèi)的尸體忽然破棺而出旭从,到底是詐尸還是另有隱情,我是刑警寧澤场仲,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布和悦,位于F島的核電站,受9級特大地震影響燎窘,放射性物質(zhì)發(fā)生泄漏摹闽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一褐健、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦蚜迅、人聲如沸舵匾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坐梯。三九已至,卻和暖如春刹帕,著一層夾襖步出監(jiān)牢的瞬間吵血,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工偷溺, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蹋辅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓挫掏,卻偏偏與公主長得像侦另,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尉共,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容