个人学习笔记,代码大部分摘自《Android应用开发从入门到精通 卢东海著》
一、简介
众所周知,sharePrefences是android四种基本的储存数据的方式。另外三种分别是sqlite、contentProvider、文件储存。而它的主要适用范围在应用程序保存一些配置信息,如保存账号密码、保留上次的设置配置等,可以说是一个十分轻巧而常用的设置。当然作为明码保存的方式,在实际运用过程中对一些重要信息还要进行加密处理。
二、使用
1、存储信息
使用步骤(1)获取shareprefences对象(2)调用edit接口的putxxx()方法(3)最后再提交
SharedPreferences sharedPreferences=getSharedPreferences("setting",0);
sharedPreferences.edit().putString("name",nametext.getText().toString()).apply();
sharedPreferences.edit().putString("pwd",pwdtext.getText().toString()).apply();
getSharePreferences(,); //获得对象,第一个参数是文件名,第二个参数是打开方式。有0或者MODE_PRIVATE
注:apply()和commit可行。区别在于是否关注返回值。如果不在意结果,则使用apply
2、读取信息
SharedPreferences useinfo=getSharedPreferences("setting",0);
String name=useinfo.getString("name","");
String pwd=useinfo.getString("pwd","");
shareprefences.getXXX(“”,)//XXX代表获取数据的类型,比如string或者int。第一个参数是key值,第二个参数代表无此值的默认数值。
3、PreferenceActivity(3.0前使用,3.0后推荐使用PreferenceFragment)
(1)先创建xml的布局文件。如例
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="网络权限">
<CheckBoxPreference android:key="gps_setting"
android:title="启动gps卫星设置" android:summary="该程序有使用GPS的权限"
/>
<CheckBoxPreference android:key="wire_setting>"
android:title="使用无线网络" android:summary="该程序有使用无线网络的权限"/>
</PreferenceCategory>
<PreferenceCategory android:title="个人信息">
<CheckBoxPreference android:key="save_info"
android:title="是否保存个人信息"/>
<EditTextPreference android:key="name"
android:title="姓名" android:summary="请输入姓名"/>
<PreferenceScreen android:key="other_msg"
android:title="其他个人信息" android:summary="是否工作">
<CheckBoxPreference android:key="work"
android:title="工作"/>
<EditTextPreference android:key="phone"
android:title="手机" android:summary="请输入手机号"/>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
其中几个注意点
- preferenceSceen 是界面,是最大的分类
- preferenceCategory 代表一个设置分类
- checkBoxPreferences 勾选框
- edittextPrefences 输入框
(2)继承PrefernceActivity类 ,加载页面
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("setting");
addPreferencesFromResource(R.xml.pre_setting);
}
(3)重写事件的处理逻辑
- 当单击某个选项框时,会调用onPreferenceTreeClick方法。如取消是否保存个人信息后,姓名输入框设置为不可用
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference){ if("save_info".equals(preference.getKey())){ findPreference("name").setEnabled(!findPreference("name").isEnabled());//设置不可用 } return super.onPreferenceTreeClick(preferenceScreen,preference); }
- 当点击确定时,会调用onPreferenceChange()。注:要继承OnPreferenceChangeListener接口,并使用setOnPreferenceChangeListener设置事件方法的实例。
-
public boolean onPreferenceChange(Preference preference,Object newValue){ preference.setSummary(String.valueOf(newValue)); return true; }
4、PreferenceFragment
基本和PreferenceActivity一样,不多赘述