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,这样才能使改变的语言生效。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/239768.html
微信扫一扫
支付宝扫一扫