2017-05-20 29 views
-1

我有切換按鈕,這對某些功能有效。但是,當我使用烤麪包時,切換按鈕是空指針。如何在Android中使用切換按鈕啓用和禁用烤麪包?

這是我的代碼:

if (tgbutton.isChecked()) { 
    Toast.makeText(getApplicationContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show(); 
    } 

應用程序運作良好時使用敬酒不切換按鈕,但應用程序時,我用吐司撥動按鈕被撞壞。

如何使用切換按鈕烤麪包?

由於

編輯:

這是從logcat的:

05-20 21:59:07.568:E/AndroidRuntime(26777):了java.lang.RuntimeException :無法啓動活動ComponentInfo {com.mygames.testpackage2/com.testpackage.challenge.CH__QuestionActivity}:java.lang.NullPointerException:試圖調用虛擬方法'布爾android.widget.ToggleButton.isChecked()'對空引用(E)/ AndroidRuntime(26777):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376) 05-20 21:59:07.568:E/AndroidRuntime(26777):at android.app.ActivityThread.access $ 800(ActivityThread.java:147) 05- 20 21:59:07.568:E/AndroidRuntime(26777):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1281) 05-20 21:59:07.568:E/AndroidRuntime(26777):at android .os.Handler.dispatchMessage(Handler.java:102) 05-20 21:59:07.568:E/AndroidRuntime(26777):at android.os.Looper.loop(Looper.java:135) 05-20 21 :59:07.568:E/AndroidRuntime(26777):在android.app.ActivityThread.main(ActivityThread.java:5253) 05-20 21:59:07.568:E/AndroidRuntime(26777):at java.lang.reflect.Method.invoke(Native Method) 05-20 21:59:07.568:E/AndroidRuntime(26777):at java .lang.reflect.Method.invoke(Method.java:372) 05-20 21:59:07.568:E/AndroidRuntime(26777):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :899) 05-20 21:59:07.568:E/AndroidRuntime(26777):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 05-20 21:59:07.568:E/AndroidRuntime(26777):引起:java.lang.NullPointerException:試圖調用空對象引用虛擬方法'布爾android.widget.ToggleButton.isChecked()' 05-20 21:59:07.568:E/AndroidRuntime (26777):at com.testpackage.challenge.CH__QuestionActivity.displayQuestion(CH__QuestionActivity.java:613) 05-20 21:59:07.568:E/AndroidRuntime(26777):at com.testpackage.challenge.CH__QuestionActivity.displayNextQuestion(CH__QuestionActivity.java:554) 05-20 21:59:07.568:E/AndroidRuntime(26777):at com.testpackage.challenge.CH__QuestionActivity.onCreate (CH__QuestionActivity.java:218) 05-20 21:59:07.568:E/AndroidRuntime(26777):at android.app.Activity.performCreate(Activity.java:5975) 05-20 21:59:07.568:E/AndroidRuntime(26777):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 05-20 21:59:07.568:E/AndroidRuntime(26777):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java :2269) 05-20 21:59:07.568:E/AndroidRuntime(26777):... 10更多

+0

發佈導致崩潰的異常的堆棧跟蹤 –

+0

我添加logcat。謝謝 – Bonnie7

回答

0

堆棧跟蹤表明您tgbutton是null

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ToggleButton.isChecked()' on a null object reference 05-20 21:59:07.568: E/AndroidRuntime(26777)

有兩件事情你應該糾正:

1)確保綁定您的視圖。

ToggleButton tgButton = (ToggleButton) findViewById(R.id.your_tg_button_id); 

2)確保在使用前要檢查null

if (null != tgbutton && tgbutton.isChecked()) { 
    Toast.makeText(getApplicationContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show(); 
} 
+0

選項#2是工作良好的... 謝謝 – Bonnie7

0

我認爲問題是關於傳遞給敬酒的上下文。

if (tgbutton.isChecked()) { 
    Toast.makeText(this, "MY TEXT HERE", Toast.LENGTH_LONG).show(); 
} 

,或者如果你是在片段,

if (tgbutton.isChecked()) { 
    Toast.makeText(getContext(), "MY TEXT HERE", Toast.LENGTH_LONG).show(); 
} 

務必從UI線程調用此。

祝您好運了

埃姆雷

+0

我會檢查。謝謝@ emre-aktürk – Bonnie7

+0

如果沒有,你能否也提供崩潰記錄? –

+0

05-20 21:53:59.025:E/AndroidRuntime(26122):引起:java.lang.NullPointerException:試圖調用虛擬方法'boolean android.widget.ToggleButton.isChecked()'null對象引用 – Bonnie7

0

tgButton未初始化。確保它被初始化:

ToggleButton tgButton = (ToggleButton) findViewById(R.id.your_tg_button_id); 
+0

切換按鈕與其他功能正常工作,例如。聲音開/關。 我的初始化是這樣的: tgbutton =(ToggleButton)findViewById(R.id.toggleButton2); – Bonnie7

+0

你可以發佈整個Activity的代碼嗎? –

0

解決方案: -

ToggleButton tb; 

tb = (ToggleButton)findViewById(R.id.toggle_button_id); 

if(tb.equals("ON") { 

    Toast.makeText(getApplicationContext(), "Message", Toast.LENGTH_LONG).show(); 
} else { 

    Toast.makeText(getApplicationContext(), "Else Part", Toast.LENGTH_LONG).show(); 
} 

乾杯!

P.S:我認爲對ToggleButton使用isChecked()並不是一個好習慣。

從logcat的報告您可能會發現,切換按鈕是僅具有布爾選項

(開或關)。所以你不需要用isChecked()函數驗證。