SharedPreferences存儲和讀取數(shù)據(jù)
轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_4f1c99de0101hur1.html
除了SQLite數(shù)據(jù)庫外,SharedPreferences也是一種輕型的數(shù)據(jù)存儲方式,它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。其存儲位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過Editor對象實(shí)現(xiàn)。實(shí)現(xiàn)SharedPreferences存儲的步驟如下:
一、根據(jù)Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數(shù)據(jù)。
四、通過commit()方法提交數(shù)據(jù)。
具體實(shí)現(xiàn)代碼如下:
public class MainActivity extends Activity {
這段代碼執(zhí)行過后,即在/data/data/com.test/shared_prefs目錄下生成了一個(gè)SP.xml文件,一個(gè)應(yīng)用可以創(chuàng)建多個(gè)這樣的xml文件。如圖所示:
1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3 <string name="STRING_KEY">string</string>
4 <int name="INT_KEY" value="0" />
5 <boolean name="BOOLEAN_KEY" value="true" />
6 </map>
在程序代碼中,通過getXXX方法,可以方便的獲得對應(yīng)Key的Value值,如果key值錯(cuò)誤或者此key無對應(yīng)value值,SharedPreferences提供了一個(gè)賦予默認(rèn)值的機(jī)會,以此保證程序的健壯性。如下圖運(yùn)行結(jié)果中因?yàn)椴o值為"NOT_EXIST"的Key,所以Log打印出的是其默認(rèn)值:“none”。在訪問一個(gè)不存在key值這個(gè)過程中,并無任何異常拋出。

SharedPreferences對象與SQLite數(shù)據(jù)庫相比,免去了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數(shù)據(jù)類型,比如其無法進(jìn)行條件查詢等。所以不論SharedPreferences的數(shù)據(jù)存儲操作是如何簡單,它也只能是存儲方式的一種補(bǔ)充,而無法完全替代如SQLite數(shù)據(jù)庫這樣的其他數(shù)據(jù)存儲方式。
SharedPreferences常用的屬性和方法
方法名稱 |
描述 |
public abstract boolean contains (String key) |
判斷SharedPreferences是否包含特定key的數(shù)據(jù) |
public abstract SharedPreferences.Editor edit () |
返回一個(gè)Edit對象用于操作SharedPreferences |
public abstract Map<String, ?> getAll () |
獲取SharedPreferences數(shù)據(jù)里全部的key-value對 |
getXXX(String key,XXX defvlaue) |
獲取SharedPreferences數(shù)據(jù)指定key所對應(yīng)的value,如果該key不存在,返回默認(rèn)值defValue。其中XXX可以是boolean、float、int、long、String等基本類型的值 |
由于SharedPreference是一個(gè)接口,而且在這個(gè)接口里并沒有提供寫入數(shù)據(jù)和讀取數(shù)據(jù)的能力。但是在其內(nèi)部有一個(gè)Editor內(nèi)部的接口,Edit這個(gè)接口有一系列的方法用于操作SharedPreference。
Editor接口的常用方法
方法名稱 |
描述 |
public abstract SharedPreferences.Editor clear () |
清空SharedPreferences里所有的數(shù)據(jù) |
public abstract boolean commit () |
當(dāng)Editor編輯完成后,調(diào)用該方法可以提交修改,而且必須要調(diào)用這個(gè)數(shù)據(jù)才修改 |
public abstract SharedPreferences.Editor putXXX (String key, boolean XXX) |
向SharedPreferences存入指定的key對應(yīng)的數(shù)據(jù),其中XXX可以是boolean、float、int、long、String等基本類型的值 |
public abstract SharedPreferences.Editor remove (String key) |
刪除SharedPreferences里指定key對應(yīng)的數(shù)據(jù)項(xiàng) |
SharedPreferences是一個(gè)接口,程序是無法創(chuàng)建SharedPreferences實(shí)例的,可以通過Context.getSharedPreferences(String name,int mode)來得到一個(gè)SharedPreferences實(shí)例
name:是指文件名稱,不需要加后綴.xml,系統(tǒng)會自動為我們添加上。一般這個(gè)文件存儲在/data/data/<package name>/shared_prefs下(這個(gè)面試常問到)
mode:是指定讀寫方式,其值有三種,分別為:
Context.MODE_PRIVATE:指定該SharedPreferences數(shù)據(jù)只能被本應(yīng)用程序讀、寫
Context.MODE_WORLD_READABLE:指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀,但不能寫
Context.MODE_WORLD_WRITEABLE:指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀寫。
package com.learn.android;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class SharedPreferences_LearnActivity extends Activity {
}
效果圖:
讀寫其他應(yīng)用SharedPreferences
在有時(shí)的開發(fā)過程中,我們可能要訪問其他的應(yīng)用程序的SharedPreferences,要實(shí)現(xiàn)這樣的功能,我們必須要保證要訪問的那個(gè)應(yīng)用程序的SharedPreferences的訪問權(quán)限要是MODE_WORLD_READABLE,這表明該SharedPreferences可以被其他應(yīng)用程序讀取,如果指定的MODE_WORLD_WRITEABLE表明該SharedPreferences可以被其他應(yīng)用程序讀取寫入其實(shí)現(xiàn)思路如下
1、
2、
以上一例的SharedPreference為例。實(shí)現(xiàn)代碼:
package com.learn.android;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.view.View;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
public class GetOtherSharedPreference
}
SharedPreferences的注意事項(xiàng):
編輯完SharedPreferences一定要記得調(diào)用Editor的commit()方法,否則不會將數(shù)據(jù)寫入到文件里的。
回顧總結(jié):
1、
SharedPreferences preferences=getPreferences(“test”,MODE_PRIVATE);
2、
得到Editor對象實(shí)例
SharedPreferences.Editor editor=preferences.editor();
3、
/data/data/<package name>/shared_prefs
http://www.cnblogs.com/wisekingokok/archive/2011/09/16/2177833.html