2012-02-21 25 views
0

我想獲得一個ToggleButton的工作,但我有幾個問題。 1.它似乎恢復到默認值,當它被點擊,我導航到另一個屏幕。 2.我嘗試使用SharedPreferences將其isChecked()值傳遞給另一個活動,現在它崩潰。單擊togglebutton時的Nullpointerexception

<ToggleButton 
    android:id="@+id/togBTN" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/homeBtn" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="106dp" 
    android:text="Voice Alerts" 
    android:textOff="OFF" 
    android:textOn="ON" /> 

上述代碼位於我的xml文件中。 下面的代碼是它的onClickListener代碼。

  case R.id.togBTN: 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putBoolean("tgpref", tg.isChecked()); // value to store 
     editor.commit(); 
    break; 
    } 

而這段代碼是我嘗試檢索值

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
    boolean tgpref = preferences.getBoolean("tgpref", true); //default is true 
    if (tgpref = true) //if (tgpref) may be enough, not sure 
    { 
     speakValue = true; 
    } 
    else 
    { 
    speakValue = false; 
    } 

這是我得到的Logcat

02-21 14:49:09.587: W/dalvikvm(483): threadid=1: thread exiting with uncaught exception  (group=0x40015560) 
02-21 14:49:09.597: E/AndroidRuntime(483): FATAL EXCEPTION: main 
02-21 14:49:09.597: E/AndroidRuntime(483): java.lang.NullPointerException 
02-21 14:49:09.597: E/AndroidRuntime(483): at ohalleran.stephanie.Traffic.SettingsActivity.onClick(SettingsActivity.java:45) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.view.View.performClick(View.java:2485) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.widget.CompoundButton.performClick(CompoundButton.java:99) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.view.View$PerformClick.run(View.java:9080) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.os.Handler.handleCallback(Handler.java:587) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.os.Looper.loop(Looper.java:130) 
02-21 14:49:09.597: E/AndroidRuntime(483): at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-21 14:49:09.597: E/AndroidRuntime(483): at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 14:49:09.597: E/AndroidRuntime(483): at java.lang.reflect.Method.invoke(Method.java:507) 
02-21 14:49:09.597: E/AndroidRuntime(483): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-21 14:49:09.597: E/AndroidRuntime(483): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-21 14:49:09.597: E/AndroidRuntime(483): at dalvik.system.NativeStart.main(Native Method) 

會很感激一些幫助與此有關。

+0

我通常使用OnCheckedChangeListener切換按鈕:http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html – AJcodez 2012-02-21 17:16:32

回答

6

您應該使用==運營商而不是=

+0

謝謝。這有幫助。我也錯過了這一行。 SharedPreferences preferences = getPreferences(MODE_PRIVATE);但是現在,檢索該值的活動只會選擇默認的活動,而不是更新的活動。 – MillyMonster 2012-02-21 16:53:17

+1

也可以使用簡單if(tgpref) – 2012-02-21 17:42:47

1

如果(tgpref)足夠

當你有形式的語句中出現空指針異常

ABCDE

是A爲空 或AB爲null 或ABC爲null 或ABCD爲空

點左側的某些內容爲空。

檢查SettingsActivity.java的第45行,你會在那裏發現你的罪魁禍首。

相關問題