AndroidSharedpreferences是用于存储small key-value数据集合的一种轻型的存储方式。它可以存储各种的基本数据类型,例如:Boolean、Float、Int、Long、String,也可以存储一些存储数据集的Set集合。在Android应用程序中,SharedPreferences被广泛应用于存储一些个性化的设置,例如:用户的登录信息、应用程序的主题颜色、应用程序的语言设置等。
一、Sharedpreferences的创建和使用
对于SharedPreferences,我们需要用到两个类:SharedPreferences和SharedPreferences.Editor,SharedPreferences用于读取存储的数据,而SharedPreferences.Editor则用于编辑和存储数据。
1、创建SharedPreferences
SharedPreferences sharedPreferences = getSharedPreferences("myPreferences", Context.MODE_PRIVATE);
getSharedPreferences()方法接受两个参数,第一个参数用于指定SharedPreferences文件的名称,第二个参数用于指定访问SharedPreferences的模式。MODE_PRIVATE模式指的是,在这个模式下,只有当前的应用程序可以访问SharedPreferences文件。如果MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE则代表可以被其他应用程序读取和写入。
2、存储数据到SharedPreferences中
SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean("isLogin", true); editor.putString("username", "Alice"); editor.putInt("age", 18); editor.apply();
putBoolean、putString、putInt方法用于将数据存储到SharedPreferences中。需要注意的一点是,调用apply()方法可以将编辑的结果提交到SharedPreferences文件中。
3、读取SharedPreferences中的数据
Boolean isLogin = sharedPreferences.getBoolean("isLogin", false); String username = sharedPreferences.getString("username", ""); int age = sharedPreferences.getInt("age", 0);
getBoolean、getString、getInt方法用于从SharedPreferences中读取数据。需要注意的是,第二个参数为默认值,在读取不到数据时,将会返回对应的默认值。
二、Sharedpreferences的监听器
SharedPreferences还支持注册监听器,用于对SharedPreferences文件的更改进行监听。
1、监听SharedPreferences的更改
SharedPreferences.OnReopenListener listener = new SharedPreferences.OnReopenListener() { @Override public void onReopen(SharedPreferences sharedPreferences) { // 当SharedPreferences被重新打开时调用 Toast.makeText(MainActivity.this, "SharedPreferences被重新打开了", Toast.LENGTH_SHORT).show(); } }; sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
通过registerOnSharedPreferenceChangeListener方法将监听器注册到SharedPreferences中,通过实现OnReopenListener接口监听文件的重新打开。
2、监听SharedPreferences中某个键值的更改
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // 当key对应的值被更改时调用 if (key.equals("isLogin")) { Boolean isLogin = sharedPreferences.getBoolean(key, false); Toast.makeText(MainActivity.this, "isLogin:" + isLogin.toString(), Toast.LENGTH_SHORT).show(); } } }; sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
通过实现OnSharedPreferenceChangeListener接口监听SharedPreferences中某个键值的更改。在onSharedPreferenceChanged方法中可以判断被更改的键值,并进行相应的处理。
三、Sharedpreferences的应用
1、使用SharedPreferences存储登录信息
在应用程序中,通常会使用SharedPreferences存储用户的登录信息。例如,存储用户的手机号、密码、上一次登录时间等信息。下面是存储手机号和密码的示例代码:
SharedPreferences sharedPreferences = getSharedPreferences("loginInfo", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("phone", etPhone.getText().toString()); editor.putString("password", etPassword.getText().toString()); editor.putBoolean("isLogin", true); editor.apply();
在读取用户的登录信息时需要注意的是:
SharedPreferences sharedPreferences = getSharedPreferences("loginInfo", Context.MODE_PRIVATE); String phone = sharedPreferences.getString("phone", ""); String password = sharedPreferences.getString("password", ""); Boolean isLogin = sharedPreferences.getBoolean("isLogin", false); if (isLogin && !TextUtils.isEmpty(phone) && !TextUtils.isEmpty(password)) { // 已经登录,跳转到主页面 } else { // 未登录,弹出登录框 }
2、使用SharedPreferences存储应用程序主题颜色
在应用程序中,用户可以自定义应用程序的主题颜色。下面是存储应用程序主题色的示例代码:
SharedPreferences sharedPreferences = getSharedPreferences("themeColor", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt("color", selectedColor); editor.apply();
在设置应用程序主题颜色时需要注意的是:
SharedPreferences sharedPreferences = getSharedPreferences("themeColor", Context.MODE_PRIVATE); int color = sharedPreferences.getInt("color", getResources().getColor(R.color.default_color)); mToolbar.setBackgroundColor(color); mTabLayout.setBackgroundColor(color); setStatusBarColor(color);
在设置应用程序主题颜色时需要设置Toolbar、TabLayout、以及状态栏的颜色。
3、使用SharedPreferences实现应用语言的切换
在应用程序中,用户可以自定义应用程序的语言。下面是存储应用程序语言的示例代码:
SharedPreferences sharedPreferences = getSharedPreferences("language", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("language", selectedLanguage); editor.apply();
在切换应用程序语言时需要注意的是:
SharedPreferences sharedPreferences = getSharedPreferences("language", Context.MODE_PRIVATE); String selectedLanguage = sharedPreferences.getString("language", Locale.getDefault().getLanguage()); Configuration configuration = getResources().getConfiguration(); if (!TextUtils.equals(selectedLanguage, configuration.locale.getLanguage())) { // 重新设置语言 Resources resources = getResources(); Configuration config = resources.getConfiguration(); config.setLocale(new Locale(selectedLanguage)); DisplayMetrics dm = resources.getDisplayMetrics(); resources.updateConfiguration(config, dm); // 重新启动MainActivity,可以再onCreate方法中进行一些必要的操作 finish(); startActivity(getIntent()); }
重新设置语言需要重新启动MainActivity,这样才能使改变的语言生效。