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/zh-hant/n/239768.html
微信掃一掃
支付寶掃一掃