SharedPreferences
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-03-13 08:12:13 閱讀次數(shù):3470次
SharedPreferences
SharedPreferences:利用程序有時(shí)需要保存少許的數(shù)據(jù),如各種配置信息(聲音的開(kāi)關(guān),震動(dòng)效果的開(kāi)關(guān)等)的存儲(chǔ),這個(gè)時(shí)候啟用數(shù)據(jù)庫(kù)有點(diǎn)夸大,安卓提供了SharedPreferences進(jìn)行保存。
SharedPreferences保存的數(shù)據(jù)主要是類似于key-value鍵值對(duì)。其提供的主要接口是負(fù)責(zé)讀取利用程序的Preferences數(shù)據(jù),經(jīng)常使用方法有以下:
- boolean contains(String key):判斷SharedPreferences是不是包括特定的key數(shù)據(jù)。
- abstract Map<String,?> getAll():獲得SharedPreferences數(shù)據(jù)里全部的ket-value對(duì)。
- boolean getXxx(String key, xxx defValue):獲得SharedPreferences數(shù)據(jù)里指定的key對(duì)應(yīng)的value.如果key不存在,則返回默許值defValue.其中的xxx可以是boolean,float,int,long,String等各種基本類型的值。
SharedPreferences依托內(nèi)部的接口,才能夠?qū)懭霐?shù)據(jù),調(diào)用edit()方法便可獲得所對(duì)應(yīng)的Editor對(duì)象。Editor提供了下面幾種方法來(lái)向SharedPreferences寫入數(shù)據(jù):
- SharedPreferences.Editor clear(): 清空SharedPreferences里所有數(shù)據(jù)。
- ShraedPreferences.Editor putXxx(String key, Xxx value): 向SharedPreferences存入指定了key的數(shù)據(jù)value,value的類型可以是boolean,float,int,long,String等。
- SharedPreferences.Editor remove(String key): 刪除 Sharedpreferences里指定key對(duì)應(yīng)的數(shù)據(jù)。
- boolean commit(): 當(dāng)Editor編輯完成后,調(diào)用該方法提交修改。
ShraedPreferences本身是1個(gè)接口,程序沒(méi)法直接創(chuàng)建SharedPreferences實(shí)例,只能通過(guò)Context提供的getShraedPreferences(String name, int mode)方法來(lái)獲得SharedPreferences實(shí)例。關(guān)于第2個(gè)參數(shù)mode有1下3種值:
- Context.MODE_PRIVATE: 指定該SharedPreferences數(shù)據(jù)只能被本利用讀寫。
- Context.MODE_WORLD_READABLE: 指定該SharedPreferences數(shù)據(jù)能被其他利用程序讀,但是不能寫入。
- Context.MODE_WORLD_WRITABLE: ShraedPreferences數(shù)據(jù)能被其他利用讀寫。
下面用1個(gè)小例子來(lái)演示下如何進(jìn)行讀寫SharedPreferences數(shù)據(jù):
public class MainActivity extends Activity {
private Button write;
private Button read;
private SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
write = (Button) findViewById(R.id.write);
read = (Button) findViewById(R.id.read);
preferences = getSharedPreferences("count",MODE_PRIVATE);
//讀取SharedsPreferences里的count數(shù)據(jù)
int count = preferences.getInt("count",0);
Toast.makeText(this,"程序之前被使用了" + count + "次。 ", Toast.LENGTH_LONG).show();
//獲得到SharedPreferences的editor,用來(lái)進(jìn)行寫入數(shù)據(jù)
SharedPreferences.Editor editor = preferences.edit();
//存入數(shù)據(jù)
editor.putInt("count",++count);
//提交修改
editor.commit();
}
}
上面這個(gè)例子只是在本利用里面使用ShraedPreferences,如果要讀寫其他利用的ShraedPreferences,首先要被訪問(wèn)的利用在創(chuàng)建的時(shí)候指定了相應(yīng)的訪問(wèn)權(quán)限,也就是上面提到的3種權(quán)限。
為了讀取到其他利用程序的SharedPreferences數(shù)據(jù),可以依照下面3個(gè)步驟來(lái)進(jìn)行:
先創(chuàng)建其他利用對(duì)應(yīng)的Context,例如:
Context context = createPackageContext("com.dada.example",Context.CONTEXT_IGNORE_SECURITY);
上面的com.dada.example就是利用程序的包名,通過(guò)這個(gè)我們可以找到相應(yīng)的利用程序。
調(diào)用獲得到的COntext的getShraedPreferences(String name, int mode)便可獲得到相應(yīng)的ShraedPreferences對(duì)象。
再根據(jù)SharedPreferences提供的edit()方法來(lái)獲得到響應(yīng)的Editor,便可向ShraedPreferences中寫入數(shù)據(jù)了。
現(xiàn)在在剛才已有的基礎(chǔ)上,再創(chuàng)建1個(gè)利用程序,讀取上1個(gè)利用的ShraedPreferneces中的數(shù)據(jù)。
public class MainActivity extends ActionBarActivity {
private Button write;
private Button read;
private int count;
private SharedPreferences preferences;
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
write = (Button) findViewById(R.id.write);
read = (Button) findViewById(R.id.read);
Context myApplication = null;
try{
myApplication = createPackageContext("com.example.pc.myapplication",Context.CONTEXT_IGNORE_SECURITY);
preferences = myApplication.getSharedPreferences("count",Context.MODE_WORLD_WRITEABLE);
editor = preferences.edit();
}
catch (Exception e){
e.printStackTrace();
}
write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.putInt("count",++count);
}
});
read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count = preferences.getInt("count",0);
Toast.makeText(getApplicationContext(),"count的值為" + count,Toast.LENGTH_LONG).show();
}
});
}
}
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)