(1)、我们以后开发的软件有时候需要向用户提供一些自定义参数的功能,用户可以根据自己的喜好对软件本身进行相关的设置已达到更好的体验。
(2)、假设我们开发了一款软件,有一项功能提供给用户设置姓名与年龄,然后提供一个按钮使用sharedPreference来保存数据,其内部是使用xml文件来保存的。
(3)、首先新建一个安卓项目,项目名称叫做SharedPreference,软件参数设置。
()、完成软件界面,,两个EditText输入用户姓名与年龄。有一个Button,为保存按钮,这里需要注意的是,年龄需要被限定为只能输入数字,因此需要用numeric属性进行参数类型的限定。为按钮指定一个onClick()方法,这个作用是当该按钮被点击时,就会执行该方法,该方法应该被定义在该界面所归属的那个ActivityMain类中,方法名为save()。
Public void save(View v){
//传入参数必须为View类型
}
(4)、新建一个PreferenceService类
首先需要创建一个SharedPreferences对象,并通过上下文对象获得它。
SharedPreferences preferences=context.getShareadPreferences(name,mode),第一个参数用于指定sharedPreferences后台用来存储参数的xml文件的名称,注意在指定文件名称时千万不要加入后缀名,因为后台默认使用xml文件会自动添加。第二个参数是创建文件的操作模式,一般来讲,用户所设置的参数是不需要被其他应用调用的,因此声明成私有。
(5)、接下来调用preferences的edit()方法获取编辑器。调用编辑器的put方法将传入的两个参数放置进去,到这里传入的数据被存放在内存中,还没有真正的保存在文件中,这个需要调用提交方法commit()。
(6、)数据被存放在应用目录的shared_pref文件夹中
public void save(String name,int age) throws Exception{
SharedPreferences perferences=context.getSharedPreferences("information", Context.MODE_PRIVATE);
Editor editor=perferences.edit();
editor.putString("name", name);
editor.putInt("age", age);
editor.commit();
}
public void save(View v) throws Exception{
}
运行结果:
林月如
(7)、从SharedPreference中读取数据:假设用户设置过自定义参数,那么将设置信息显示在EditText框中
1、新建一个getPreferences()方法,返回值是Map对象
2、获取preferences对象,调用get方法 getString(name,value),第二个参数的意思是如果要找的name参数不存在,则返回第二个值,一般设置为””.
3、在MainActivity中setText.
(8)、这里介绍一个API,如果需要在MainActivity中获得sharedPreference对象,可以调用this.gerPeferences(MODE),这个方法不传入文件名,默认文件名为不带包名的Activity类名
源代码:
public Map getPreferences(){
Map map=new HashMap();
SharedPreferences perferences=context.getSharedPreferences("information", Context.MODE_PRIVATE);
map.put("name", perferences.getString("name", ""));
map.put("age", String.valueOf(perferences.getInt("age", 0)));
return map;
}
Map map=service.getPreferences();