Java 尝试动态禁用首选项时的空指针
在以下代码中,Java 尝试动态禁用首选项时的空指针,java,android,Java,Android,在以下代码中,mPreference=(首选项).出现空指针异常(即,在调试器打开的情况下,mPreference显示为空;NB键为非空,我可以用文字替换,但它仍会给我相同的异常): 在构造函数中实例化了settingsManager的类的applySettings方法中,以下代码正在调用该类: public class ConfigurationSetter { private static Context mContext; private static SettingsM
mPreference=(首选项).
出现空指针异常(即,在调试器打开的情况下,mPreference
显示为空;NB键为非空,我可以用文字替换,但它仍会给我相同的异常):
在构造函数中实例化了settingsManager
的类的applySettings
方法中,以下代码正在调用该类:
public class ConfigurationSetter {
private static Context mContext;
private static SettingsManager settingsManager;
public ConfigurationSetter(Context context) {
mContext = context;
settingsManager = new SettingsManager();
}
private static void applySettings(Context context, String key,
String value, String enabled) {
settingsManager.setPrefEnabled(mContext, key, enabled);
}
}
我一直在抓我的头,但可能有点太累了,我自己想不出来。感谢您的帮助
与此问题相关,我想知道intent是否是此活动所需的实例化器。您的
onCreate
方法从未在此代码中调用过(因此,在调用addPreferencesFromResource
的过程中,首选项屏幕
没有按假设填充)onCreate
是活动
生命周期的一部分,如果您使用意图启动活动
,则会调用该生命周期。人们通常不会使用new
创建活动,因为在这种情况下,它们不会链接到适当的上下文
,并显示其他形式的未定义行为,如您的行为。NPE是发生在getPreferenceScreen()
调用还是findReference()
调用中?如果findPreference()
需要非空输入,您确定key
为非空吗?@quantumi更新了帖子以响应您的问题GetPreferenceScreen()可能返回空值,然后您尝试调用此空值的方法。
public class ConfigurationSetter {
private static Context mContext;
private static SettingsManager settingsManager;
public ConfigurationSetter(Context context) {
mContext = context;
settingsManager = new SettingsManager();
}
private static void applySettings(Context context, String key,
String value, String enabled) {
settingsManager.setPrefEnabled(mContext, key, enabled);
}
}