Android SharedReferences设置已检查崩溃

Android SharedReferences设置已检查崩溃,android,android-preferences,Android,Android Preferences,我试图在关闭另一个切换后,将首选项屏幕中的切换按钮切换为false。所以在这里,当时间倒转的时候,我想关掉名字。不管它怎么爆炸。有人知道我做错了什么吗 import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle;

我试图在关闭另一个切换后,将首选项屏幕中的切换按钮切换为false。所以在这里,当时间倒转的时候,我想关掉名字。不管它怎么爆炸。有人知道我做错了什么吗

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.widget.Toast;
import android.widget.ToggleButton;


public class UserSettingActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
    SharedPreferences mPreferences;
    Boolean frequency;


    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    }


    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        boolean mBool = false;

        if (key.equals("cervical_mucus")) {
             // do something
            Context context = getApplicationContext();
            Toast.makeText(context, "Hello toast 1!", Toast.LENGTH_LONG).show();

            ToggleButton mToggle = (ToggleButton)findViewById(R.id.mucus_stamps);
            mToggle.setChecked(mBool);
         }
    }

    protected void onPause()
    {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    protected void onResume()
    {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

}
错误:

    05-09 14:40:18.914: E/AndroidRuntime(25005): FATAL EXCEPTION: main
    05-09 14:40:18.914: E/AndroidRuntime(25005): java.lang.NullPointerException
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at com.projectcaruso.naturalfamilyplaning.UserSettingActivity.onSharedPreferenceChanged(UserSettingActivity.java:37)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:475)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:385)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.preference.Preference.tryCommit(Preference.java:1349)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.preference.Preference.persistBoolean(Preference.java:1615)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.preference.TwoStatePreference.setChecked(TwoStatePreference.java:83)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.preference.SwitchPreference$Listener.onCheckedChanged(SwitchPreference.java:54)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.widget.CompoundButton.setChecked(CompoundButton.java:126)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.widget.Switch.setChecked(Switch.java:666)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.widget.CompoundButton.toggle(CompoundButton.java:87)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.widget.CompoundButton.performClick(CompoundButton.java:99)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.view.View$PerformClick.run(View.java:17355)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.os.Handler.handleCallback(Handler.java:725)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.os.Handler.dispatchMessage(Handler.java:92)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.os.Looper.loop(Looper.java:137)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at android.app.ActivityThread.main(ActivityThread.java:5041)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at java.lang.reflect.Method.invokeNative(Native Method)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at java.lang.reflect.Method.invoke(Method.java:511)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    05-09 14:40:18.914: E/AndroidRuntime(25005):    at dalvik.system.NativeStart.main(Native Method)
编辑:


您可以使用
findPreference
并传递其
android:key
来获取对您的
开关首选项的引用:

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    boolean mBool = false;

    if (key.equals("cervical_mucus")) {
        // do something
        Context context = getApplicationContext();
        Toast.makeText(context, "Hello toast 1!", Toast.LENGTH_LONG).show();

        SwitchPreference switchPreference = (SwitchPreference) findPreference("mucus_stamps");
        switchPreference.setChecked(mBool);
    }
}
编辑 您似乎没有在
onPause
中注销侦听器:

protected void onPause()
{
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

您的
mToggle
为空,您将其称为何处。并将您的代码与logcat traceHow is my mToggle null和ToggleButton mToggle=(ToggleButton)findViewById(R.id.name)一起发布;你的切换按钮在哪里?Post
R.xml.settings
@jcaruso我被这个
ToggleButton mToggle=(ToggleButton)findViewById(R.id.name)弄糊涂了
并搜索id为
name
的交换机,检查Steven Byle Answer谢谢!你是救命恩人!
protected void onPause()
{
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}