java - 如何在 Android 应用程序被杀时保留 SharedPreferences 值
问题描述
我正在做一个安卓项目。我想在 android 应用程序被杀死时推送通知。所以,我正在创建 BroadcastReceiver 和 Service 类。他们在工作。但是,我有一个问题。
这个问题是,当用户登录我的应用程序时;我用 SharedPreferences 来存储这个值。但是,当我杀死应用程序时,这个 SharedPreferences 取“null”值。
java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)”
当我搜索时,人们说:“editor.clear();” 但它不起作用。我能做些什么?
我的登录类:
public static SharedPreferences UserDetailsSP,
UserDetailsSP = getSharedPreferences("UserDetails", MODE_PRIVATE);
SharedPreferences.Editor UserDetailsPreferencessEdit = UserDetailsSP .edit();
UserDetailsPreferencessEdit.clear();
UserDetailsPreferencessEdit.putString("UserName", A);
UserDetailsPreferencessEdit.commit();
我用这个调用其他java类:
String a1 = Login.UserDetailsSP.getString("UserName","A");
解决方案
You this approach create a SessionManager class
public class AppPrefrences {
private static SharedPreferences mPrefs;
private static SharedPreferences.Editor mPrefsEditor;
public AppPrefrences(Context context)
{
int PRIVATE_MODE = 0;
pref = context.getSharedPreferences("UserDetails", PRIVATE_MODE);
editor = pref.edit();
editor.apply();
}
public static boolean isUserLoggedOut() {
return mPrefs.getBoolean("id_logged_in", false);
}
public static void setUserLoggedOut(Boolean value) {
mPrefsEditor.putBoolean("id_logged_in", value);
mPrefsEditor.commit();
}
public static String getUserName() {
return mPrefs.getString("userName", "");
}
public static void setUserName(String value) {
mPrefsEditor.putString("userName", value);
mPrefsEditor.commit();
}
public static void clearAllPreferences()
{
mPrefsEditor.clear();
mPrefsEditor.commit();
}
}
Inside your activity
AppPrefrences sess = new AppPrefrences(this);
sess.setUserName("A");
推荐阅读
- python - Flask:如果在应用程序中访问了 url,则返回不同的页面
- r - 从公式调用中获取所有因子变量
- node.js - nodejs postgresql发送安全参数错误
- c# - 如何修改 c# 表单设计中发生的错误?
- google-cloud-platform - 需要排查 Bigtable 读取延迟问题
- docker - 如何在 nginx.conf 中定义位置正则表达式匹配块
- html - 获取 div BeautifulSoup 中的 div 内容
- python - 从 Python 子进程运行 Chrome 将不允许使用指定的用户数据目录
- wordpress - Elementor 在 Fontend 中显示 CSS 代码,为什么?
- angular - 在 Angular 中使用过滤器时,“类”类型上不存在属性