SharedPreferences简介

publicinterface
SharedPreferences
android.content.SharedPreferences
SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。
实际上
SharedPreferences是采用了XML格式将数据存储到设备中,它
在DDMS中的FileExplorer中的
/data/data/<packagename>/shares_prefs下。
以下为获取SharedPreferences对象的两个方法:
Context.getSharedPreferences(Stringname,intmode)
参数
name为本组件的配置文件名(如果想要与本应用程序的其他组件共享此配置文件,可以用这个名字来检索到这个配置文件)。
mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。
Activity.SharedPreferencesgetPreferences(intmode)
RetrieveaSharedPreferencesobjectforaccessingpreferencesthatareprivatetothisactivity.
ThissimplycallstheunderlyinggetSharedPreferences(String,int)method
bypassinginthisactivity'sclassnameasthepreferencesname.

参数
modeOperatingmode.UseMODE_PRIVATEforthedefaultoperation,MODE_WORLD_READABLEandMODE_WORLD_WRITEABLEtocontrolpermissions.
这里以Activity的名字作为name参数调用Context.getSharedPreferences(Stringname,intmode)
mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。


如果要读取
SharedPreferences的 信息,只需要直接使用SharedPreferences对象的getXXX()方法即可,
而如果要写入配置信息,则必须先调用SharedPreferences对象的edit()方法,
得到SharedPreferences.Editor对象,然后再调用Editor的putXXX()方法写入配置信息,
最后调用Editor的commit()方法提交更改后的配置文件。


因为很多程序都有这个需要所以可以自己把该功能集成并列出一些接口函数以后用的话会方便很多。
SharedPreferencesResolver.java文件
packagecom.teleca.util;

importjava.util.Map;

importandroid.content.Context;
importandroid.content.SharedPreferences;

publicclass SharedPreferencesResolver {
SharedPreferences.Editoreditor;

Contextcontext;
SharedPreferencessp;


public SharedPreferencesResolver (Contextc,Stringname,intmode){
context=c;
sp=context.getSharedPreferences(name,mode);
}
publicfinalbooleancontains(Stringkey)
{
returnsp.contains(key);
}
publicfinalMap<String,?>getAll()
{
returnsp.getAll();
}
publicfinalStringgetValue(Stringkey,StringdefaultValue){
returnsp.getString(key,defaultValue);
}
publicfinalbooleangetValue(Stringkey,booleandefaultValue){
returnsp.getBoolean(key,defaultValue);
}
publicfinalfloatgetValue(Stringkey,floatdefaultValue){
returnsp.getFloat(key,defaultValue);
}
publicfinalintgetValue(Stringkey,intdefaultValue){
returnsp.getInt(key,defaultValue);
}
publicfinallonggetValue(Stringkey,longdefaultValue){
returnsp.getLong(key,defaultValue);
}
publicfinalvoidregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener)
{
sp.registerOnSharedPreferenceChangeListener(listener);
}
publicfinalvoidunregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener)
{
sp.unregisterOnSharedPreferenceChangeListener(listener);
}
publicfinalvoidOpenEditor(){
if(editor==null)
editor=sp.edit();
}
publicfinalvoidclearEditor()
{
editor.clear();
}
publicfinalvoidputValue(Stringkey,Stringvalue){
editor.putString(key,value);
}
publicfinalvoidputValue(Stringkey,booleanvalue){
editor.putBoolean(key,value);
}
publicfinalvoidputValue(Stringkey,floatvalue){
editor.putFloat(key,value);
}
publicfinalvoidputValue(Stringkey,intvalue){
editor.putInt(key,value);
}
publicfinalvoidputValue(Stringkey,longvalue){
editor.putLong(key,value);
}
publicfinalvoidremove(Stringkey)
{
editor.remove(key);
}
publicfinalvoidcommitEditor(){
if(editor!=null)
editor.commit();
}

publicfinalvoid closeEditor (){
editor=null;
}
}

访问本应用程序的SharedPreferences:
StringspName="contacts";
intspMode=Context.MODE_WORLD_WRITEABLE|Context.MODE_WORLD_READABLE;
SharedPreferencesResolverspResolver=newSharedPreferencesResolver(Hello.this,spName,spMode);
spResolver.OpenEditor();
spResolver.putValue("name","hubin");
spResolver.putValue("phone","13880890660");
spResolver.commitEditor();
spResolver.closeEditor();
Log.i(tag,spResolver.getValue("name",""));
Log.i(tag,spResolver.getValue("phone",""));
这里用 Context.MODE_WORLD_WRITEABLE|Context.MODE_WORLD_READABLE表示所有应用程序都对它可读可写。
跨包访问另外一个应用程序的SharedPreferences.
try{
ContextotherContext=this.createPackageContext("com.teleca", Context.CONTEXT_IGNORE_SECURITY );
Stringname="contacts";
intmode= Context.MODE_WORLD_WRITEABLE;
SharedPreferencessp=otherContext
.getSharedPreferences(name,mode);

Log.i(tag,"name:"+sp.getString("name","NA"));
Log.i(tag,"phone:"+sp.getString("phone","NA"));
SharedPreferences.Editoreditor=sp.edit();
editor.putString("wife","yangyang");
editor.commit();
Log.i(tag,"wife:"+sp.getString("wife","NA"));
}catch(NameNotFoundExceptione){
Log.e(tag,"Erro:",e);
}
注意需要在SharedPreferences创建时通过mode参数来设置非本地应用程序的访问权限。
Context.MODE_WORLD_WRITEABLE所有应用程序对它可写。
C ontext.MODE_WORLD_READABLE所有应用程序对它可读。
Context.MODE_WORLD_WRITEABLE|Context.MODE_WORLD_READABLE所有应用程序都对它可读可写。
运行使用相同用户ID的一组应用程序
有时,设置应用程序的用户ID是极为有用的(大多数情况下,较好的方式是让平台选择一个唯一的ID)。
如果多个应用程序需要在相互之间存储数据。但是你不希望这些数据被其他应用程序访问,
则可以将权限设置为私有并共享UID来允许访问。可以在mainfest文件中使用ShareUserId属性来共享UID。
android:sharedUserId="YourFancyID"
关于跨包访问Preferences的更多内容请参考《 跨包访问Preferences
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值