【问题标题】:get SharedPrefrences values in fragment?在片段中获取 SharedPreferences 值?
【发布时间】:2021-01-26 06:42:10
【问题描述】:
我如何获取 SharedPrefrences 值,例如下面获取片段中的登录状态以进行保存?
SharedPreferences prefs;
prefs= PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = prefs.edit();
editor.putString("isSignIn", "Yes");
editor.commit();
【问题讨论】:
标签:
java
android
android-fragments
fragment
sharedpreferences
【解决方案1】:
尝试使用String result = prefs.getString("isSignIn", "No");,HERE 中的一些文档。顺便提一句。最好存储boolean 而不是String
【解决方案2】:
任何有困惑的人,我可以给你一个简单的代码:
// 您可以为 sharedPreferences 创建单独的类并在每个活动中使用它
public class UserLoginPref {
private Context context;
private SharedPreferences sharedPreferences;
private String Phone;
private boolean isSignIn;
public void setIsSignIn(boolean isSignIn){
sharedPreferences.edit().putBoolean("isSignIn",isSignIn).commit();
}
public boolean getIsSignIn(){
isSignIn = sharedPreferences.getBoolean("isSignIn",false);
}
public String getPhone() {
String mobile = sharedPreferences.getString("Phone","");
return mobile;
}
public void setPhone(String phone) {
sharedPreferences.edit().putString("Phone",phone).commit();
}
public UserLoginPref(Context context){
this.context = context;
sharedPreferences = context.getSharedPreferences("UserLoginPref",Context.MODE_PRIVATE);
}
public void logOutUser(){
sharedPreferences.edit().clear();
setPhone("");
}
}
// And use it in your activity like this
UserLoginPref userPref = new UserLoginPref(this);
userPref.setIsSignIn(true);
【解决方案3】:
我有一个在我的大多数项目中使用的管理器文件。下面是它的代码。
class PreferenceManager constructor(
private val context: Context
) {
private var sharedPreferences: SharedPreferences =
context.getSharedPreferences(context.packageName, Context.MODE_PRIVATE)
companion object {
const val USER_ID = "user_id"
}
fun clearSharedPreferences(sessionExpired: Boolean) {
context.getSharedPreferences(context.packageName, 0).edit().clear().apply()
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
preferences.edit().clear().apply()
}
fun saveBooleanValue(key: String, value: Boolean) {
sharedPreferences.edit().putBoolean(key, value).apply()
}
fun getBooleanValue(key: String): Boolean {
return sharedPreferences.getBoolean(key, false)
}
fun saveStringValue(key: String, value: String) {
sharedPreferences.edit().putString(key, value).apply()
}
fun getStringValue(key: String): String? {
return sharedPreferences.getString(key, null)
}
fun saveIntValue(key: String, value: Int) {
sharedPreferences.edit().putInt(key, value).apply()
}
fun getIntValue(key: String): Int {
return sharedPreferences.getInt(key, 0)
}
}
上面的类有所有的getter和setter。无论您需要在哪里保存数据,只需在 Preference 实例上调用 save 方法即可。获取数据也是如此。这样,您将有一个中心点来管理插入和获取数据。将来您可以在一个中心位置添加任何类型的加密,这就是我刚刚分享的您的偏好类。此外,您将有中心点来定义伴随对象中的键。您可以从项目中的任何地方访问它。
【解决方案4】:
//Initialize shared preferences
SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences("com.your.package", Context.MODE_PRIVATE);
//Write the value to shared preferences
sharedPreferences.edit().putBoolean("isSignIn", true).apply();
//Get the value from shared preferences
sharedPreferences.getBoolean("isSignIn", default_value);