Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试动态禁用首选项时的空指针_Java_Android - Fatal编程技术网

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);
    }
}