Java 崩溃保存按钮切换状态
我正试图保存切换按钮的状态,但我遇到了一个崩溃。。我使用的是一个片段,因此我以这种方式创建了代码:Java 崩溃保存按钮切换状态,java,android,sharedpreferences,onclicklistener,togglebutton,Java,Android,Sharedpreferences,Onclicklistener,Togglebutton,我正试图保存切换按钮的状态,但我遇到了一个崩溃。。我使用的是一个片段,因此我以这种方式创建了代码: public class fragmentbutton extends Fragment { public ToggleButton onOff; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bund
public class fragmentbutton extends Fragment {
public ToggleButton onOff;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Retrieving the currently selected item number
int position = getArguments().getInt("position");
// List of rivers
String[] menus = getResources().getStringArray(R.array.menus);
View v = inflater.inflate(R.layout.fragmentbutton, container, false);
final SharedPreferences preferences = getActivity().getPreferences(getActivity().MODE_PRIVATE);
boolean tgpref = preferences.getBoolean("tgpref", true); //default is true
if (tgpref = true) //if (tgpref) may be enough, not sure
{
onOff.setChecked(true);
}
else
{
onOff.setChecked(false);
}
retrieveFromDb();
onOff = (ToggleButton)v.findViewById(R.id.onoff);
onOff.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked == true){
getActivity().startService(new Intent(getActivity(),NotificationService.class));
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("tgpref", true); // value to store
editor.commit();
}else {
getActivity().stopService(new Intent(getActivity(),NotificationService.class));
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("tgpref", false); // value to store
editor.commit();
}
}
});
return v;
}
---
---
日志:
12-12 22:45:18.836: E/AndroidRuntime(23007): FATAL EXCEPTION: main
12-12 22:45:18.836: E/AndroidRuntime(23007): Process: com.dd.allinonesystempro, PID: 23007
12-12 22:45:18.836: E/AndroidRuntime(23007): java.lang.NullPointerException
12-12 22:45:18.836: E/AndroidRuntime(23007): at com.dd.allinonesystempro.batteryfragment.onCreateView(batteryfragment.java:114)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.Fragment.performCreateView(Fragment.java:1700)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.BackStackRecord.run(BackStackRecord.java:684)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.os.Handler.handleCallback(Handler.java:733)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.os.Handler.dispatchMessage(Handler.java:95)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.os.Looper.loop(Looper.java:136)
12-12 22:45:18.836: E/AndroidRuntime(23007): at android.app.ActivityThread.main(ActivityThread.java:5017)
12-12 22:45:18.836: E/AndroidRuntime(23007): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 22:45:18.836: E/AndroidRuntime(23007): at java.lang.reflect.Method.invoke(Method.java:515)
12-12 22:45:18.836: E/AndroidRuntime(23007): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-12 22:45:18.836: E/AndroidRuntime(23007): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-12 22:45:18.836: E/AndroidRuntime(23007): at dalvik.system.NativeStart.main(Native Method)
有人能帮我吗?让我们试着改变一下:
if (tgpref = true)
致:
要进行比较,必须使用==。
似乎
onOff
为空
您首先尝试设置onOff(为null),然后在几行之后尝试设置onOff
onOff = (ToggleButton)v.findViewById(R.id.onoff);
在尝试访问onOff之前,请向上移动此行
另外
if(tgpref=true)
应该是if(tgpref==true)
在调用setChecked()之前,必须初始化onOff
视图:
onOff = (ToggleButton)v.findViewById(R.id.onoff);
if (tgpref == true) //if (tgpref) may be enough, not sure
{
onOff.setChecked(true);
}
else
{
onOff.setChecked(false);
}
在batteryfragment的第114行中有什么内容?这:onOff.setChecked(true)代码>我发布的只是batteryfragment的一部分。不要在意这篇文章中的片段名称。。我想以特定的方式显示按钮和SharedReferences。。我该怎么解决呢?这行看起来好像有什么问题。好的,发布你的新logcat与我发布的logcat相同:(只有一件事..我现在用这种方式设置按钮:boolean tgpref=preferences.getBoolean(“tgpref”,false);
因此它将以假状态开始..但它以真状态开始..为什么?只有一件事..我现在用这种方式设置按钮:boolean tgpref=preferences.getBoolean(“tgpref”,false);
因此它将以假状态开始..但它以真状态开始..为什么?很可能是因为您保存了一个首选项值(true
)在应用程序的上一次运行中。请尝试卸载或清理应用程序的数据。
onOff = (ToggleButton)v.findViewById(R.id.onoff);
if (tgpref == true) //if (tgpref) may be enough, not sure
{
onOff.setChecked(true);
}
else
{
onOff.setChecked(false);
}