偏好设置也是Android中的数据存储方式的一种,它是以键值对的形式来存储数据的,用来存储一些比较小型的数据,我们在实际开发中,是经常会用到的,而且用户在平常的使用中,也会在不停的使用,偏好设置还是挺方便的。
偏好设置
作为一名Android的开发者,你不可以不知道偏好设置,对于一下较小的数据,以键值对形式保存的数据,我们可以采用偏好设置来存储,例如用户是否选择打开wifi、用户设置的字体等一些相关信息。当用户在第一次设置之后就不需要去再次设置,否则就会让人感觉不停地设置是很烦人的。下面我就以一个小例子来简单介绍一下,例如:当我们第一次登录之后,下次点击就不需要再登录,可直接进入主界面(类似于QQ和微信的)。
偏好设置文件保存在/data/data/<包名>/shared_prefs/目录下,当我们将应用程序卸载时,该数据也会随着卸载而被删除。
说明: 打开该软件时,首先进入一个历时1.5秒的欢迎界面,当用户未登录过时,会跳转到登录界面,当用户已经登录过后,直接跳转到主界面。
欢迎界面的偏好设置记录
// 偏好设置,通过判断是否已经登录来决定是否打开登录界面
SharedPreferences sp = getSharedPreferences("login", MODE_PRIVATE) ;
boolean isLogin = sp.getBoolean("isLogin", true) ;
final Class<? extends Activity> clz ;
if(isLogin) {
clz = LoginActivity.class ;
} else {
clz = MainActivity.class ;
}
handler = new Handler() ;
// 初始化界面显示时间
delayMillis = 1500 ;
// 延迟1.5s启动主界面
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(WelcomeActivity.this, clz) ;
startActivity(intent) ;
finish() ;
}
}, delayMillis) ;
新建偏好设置文件,文件名为“login”,我们不需要取自己添加扩展名,系统会默认为我们加上.xml扩展名的,后面的模式是选择私有的,本案例独有的,其他进程不能访问的;
SharedPreferences sp = getSharedPreferences("login", MODE_PRIVATE) ;
以上代码中,我们通过设置一个boolean型的变量来记录是否已经登录,通过偏好设置文件读取其数据,当未登录时,取不到其值,后面默认一个true;
boolean isLogin = sp.getBoolean("isLogin", true) ;
剩下的就是一些界面跳转的逻辑,相信这个大家都能看懂的,在这里就不多解释了;
登录界面设置
// 偏好设置,当用户登录后,下次进入不需要再次登录
SharedPreferences sp = getSharedPreferences("login", MODE_PRIVATE) ;
Editor loginEditor = sp.edit() ;
loginEditor.putBoolean("isLogin", false) ;
loginEditor.commit() ;
在用户的登录界面设置,当用户登录成功之后,通过偏好设置记录用户已经登录,获取在欢迎界面新建的偏好设置文件,新建一个编辑器对象(Editor — sp.edit()),然后设置偏好设置的属性值,这里我们将“islogin”设置为false,意为下次启动不需要进入登录界面,设置完之后,一定要记住提交设置,否则刚才的设置就白设置了,前面也是读不出来的。
这样完成之后,我们就会实现开始时的功能,这里我们简单说一下,首先我们新建了偏好设置对象,并创建偏好设置文件,用来存储我们相应的数据,然后通过读取偏好设置文件里的变量值来判断是否需要启动登录界面;
我们在登录之后,通过loginEditor.putBoolean(“isLogin”, false) 这一步将偏好设置文件中的”isLogin”这个值设置为false,然后在欢迎界面的时候,通过boolean isLogin = sp.getBoolean(“isLogin”, true) 来获取“isLogin”的值,这样我们就将该设置传过来了。
在偏好设置文件中的存储其实也就是这样的,”isLogin”– true(false)这种形式的。