Android SharedReferences设置已检查崩溃
我试图在关闭另一个切换后,将首选项屏幕中的切换按钮切换为false。所以在这里,当时间倒转的时候,我想关掉名字。不管它怎么爆炸。有人知道我做错了什么吗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;
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)一起发布;你的切换按钮在哪里?PostR.xml.settings
@jcaruso我被这个ToggleButton mToggle=(ToggleButton)findViewById(R.id.name)弄糊涂了
并搜索id为name
的交换机,检查Steven Byle Answer谢谢!你是救命恩人!
protected void onPause()
{
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}