刚开始做安卓,经常看一些视频书籍什么的,但是看完是没有什么印象的,写这篇博客以来是为了自己能记住,另外就是如果有想学的或者也是刚做没多久的朋友可以看一下
sharedpreferences在安卓app中大多是为了来保存用户设置的,一般以键值对的方式来保存。
既然说到了键值对,第一,你的键和值要匹配这个不要写错了,第二就是咱们怎样放进去,然后拿出来。
1/先说保存,记住三部通过edit()获取一个Sharedpreferences的Editor对象,然后通过put方法将你的值保存或者覆盖到文件中,最后,千万别忘记通过commit来提交,不提交是不会保存的!
多的不说,边看代码边理解吧:先说怎么通过sharedprefences来保存(假设点击bt_start按钮来开始)
bt_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sp = getSharedPreferences("shezhi",MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("music", "bigMisic");
editor.putBoolean("bgMusic", true);
editor.commit();
}
});
通过这样的方式我们就把我们的设置music和bgMusic他们的值就保存下来了,如果你想看是不是保存了,或者保存到哪里了,ok打开你的DDMS,在File Explorer下——>data——>data——>找到你这个的包名,里面有个文件夹是shared_prefs,里面那个文件的名字就是我们getSharedPreferences中的第一个参数shezhi。你可以把这个文件导出,打开来看:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="music">bigMisic</string>
<boolean name="bgMusic" value="true" />
</map>
也就是说我们的设置内容已经保存下来了,其中getSharedFreferences()方法中第二个参数,自己可以把鼠标放到这个方法上看里面的参数是什么意思,MODE_PRIVATE和0是一个意思 就是私有的,只供我们自己来读写。这样的话我们设置完保存就会了,那等我们重新打开这个app或者说我们重新开机之后这个设置还是我们保存的那一个吗,我可以确定的说,是的,但是我们还需要再打开的时候读取一下我们的设置!
2/读取我们的设置
这里我假设bt_stop来读取我们的设置,当然我们在写app的时候,这个读取是我们特别要注意的地方,可能说我们刚打开这个app的时候就有相关设置比方说声音,假设加载前的界面有音乐,使用过程中有音乐,当然设置里面还有音乐的相关设置,这些个地方都是要进行读取的,并不是说我们打开相关设置里面才会有,现在的app在安卓方面已经做得很成熟了,(其实我都感觉熟透了--.)所以说,在你们的生命周期内,像activity中可能有,我们的服务,你的声音service中,可能都会有,一定要考虑全面,这也是我们做程序员的逻辑思维一定要清晰。
bt_stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sp1 = getSharedPreferences("shezhi", 0);
String music = sp1.getString("music", "默认值");
boolean bgMusic = sp1.getBoolean("bgMusic", true);
tv.setText("设置的值是:"+music+","+bgMusic);
}
});
这里你不用管sp还是sp1 sp2 的 只要你的key是对的是shezhi就行,后面那个0意思和private一样私有的意思,类型看清然后选择get方法,其中get方法中是有两个参数的,第一个是Key我们都知道 那第二个呢,就不是设置了,是你在没有保存过设置的情况下的一个默认值。这样的话我们在做一个有设置的app的时候,或者需要保存键值对这种形式的时候,就能用到sharedpreferences了,
其中还有一点!使用这个只能保存一些基本类型的参数,像string ,boolean ,int ,char之类的。
这样以后再做app时视情况而定是需要在哪保存,在那些地方需要打开这些设置,只要做全面了这些,相信就没有问题了。