您的位置:

AndroidSharedpreferences的应用

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,这样才能使改变的语言生效。