我正在开发Android应用程序,即使应用程序已关闭也使用推送通知来获取通知并使用共享偏好保存它们,我创建了一个广播接收器类并初始化了我在另一个名为Register in insideReceive的类中定义的sharedpreferences对象( )如下:
@Override
public void onReceive(Context context, Intent intent) {
// Register.preferences = context.getSharedPreferences(arg0, arg1);
// Register.listPreferences = context.getSharedPreferences(arg0, arg1);
Register.notificationList = new ArrayList<NotificationBody>();
Register.preferences = PreferenceManager
.getDefaultSharedPreferences(context);
Register.listPreferences= PreferenceManager
.getDefaultSharedPreferences(context);
String action = intent.getAction();
int getSize = Register.preferences.getInt("listSize", 0);
Editor edit = Register.listPreferences.edit();
当应用程序已经打开时通知工作但是当应用程序关闭并且我尝试发送通知时,应用程序显示强制关闭消息,我在logcat中看到NullPointerException,我想问题来自于初始化sharedpreferences对象,那么还有另一种在广播接收器中正确初始化该对象的方法吗?
答案 0 :(得分:0)
错误不是因为context
因为Register
活动而尝试将代码更改为:
@Override
public void onReceive(Context context, Intent intent) {
// Register.preferences = context.getSharedPreferences(arg0, arg1);
// Register.listPreferences = context.getSharedPreferences(arg0, arg1);
ArrayList<NotificationBody> notificationList = new ArrayList<NotificationBody>();
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences listPreferences= PreferenceManager
.getDefaultSharedPreferences(context);
String action = intent.getAction();
int getSize = preferences.getInt("listSize", 0);
Editor edit = listPreferences.edit();
同样preferences
和listPreferences
似乎有相同的价值,我不知道为什么两者都有。
PreferenceManager.getDefaultSharedPreferences(context)
每次都会返回相同的首选项对象。
答案 1 :(得分:0)
vipul是对的。这是因为你的应用程序依赖于一个Activity类,当app关闭时很可能会被销毁。
我只是想举例说明如何使用帮助程序类来简化共享首选项的读/写操作:
public class PreferencesData {
public static void saveString(Context context, String key, String value) {
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context);
sharedPrefs.edit().putString(key, value).commit();
}
public static String getString(Context context, String key) {
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context);
return sharedPrefs.getString(key);
}
}
答案 2 :(得分:0)
我已经添加了如何在android中使用共享首选项。请检查我的答案。希望它对你有所帮助。请告诉我。如果您需要更多说明。感谢