2012-05-24 72 views
0
@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()){ 
    case R.id.upArrow: 
     upSound.start(); 

     En_description.setText("\"Straight Ahead\""); 
     break; 

    case R.id.downArrow: 
     downSound.start(); 

     En_description.setText("\"Down\""); 
     break; 

    case R.id.rightArrow: 
     rightSound.start(); 

     En_description.setText("\"Right\""); 
     break; 

    case R.id.leftArrow: 
     leftSound.start(); 

     En_description.setText("\"Left\""); 
     break; 
    default: 

    } 
} 

的代碼很簡單,當我按下箭頭這類型的它的方向和播放聲音 由於某種原因,它的工作原理有時和其他時間我得到一個強制關閉HELP 由於這是日誌由於開關箱方法而強制關閉?

05-24 17:52:20.384: W/dalvikvm(343): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
05-24 17:52:20.394: E/AndroidRuntime(343): Uncaught handler: thread main exiting due to uncaught exception 
05-24 17:52:20.404: E/AndroidRuntime(343): java.lang.NullPointerException 
05-24 17:52:20.404: E/AndroidRuntime(343): at com.aboutera.learnArabic.Directions.onClick(Directions.java:77) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.View.performClick(View.java:2364) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.View.onTouchEvent(View.java:4179) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.View.dispatchTouchEvent(View.java:3709) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
05-24 17:52:20.404: E/AndroidRuntime(343): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
05-24 17:52:20.404: E/AndroidRuntime(343): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
05-24 17:52:20.404: E/AndroidRuntime(343): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.os.Looper.loop(Looper.java:123) 
05-24 17:52:20.404: E/AndroidRuntime(343): at android.app.ActivityThread.main(ActivityThread.java:4363) 
05-24 17:52:20.404: E/AndroidRuntime(343): at java.lang.reflect.Method.invokeNative(Native Method) 
05-24 17:52:20.404: E/AndroidRuntime(343): at java.lang.reflect.Method.invoke(Method.java:521) 
05-24 17:52:20.404: E/AndroidRuntime(343): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
05-24 17:52:20.404: E/AndroidRuntime(343): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
05-24 17:52:20.404: E/AndroidRuntime(343): at dalvik.system.NativeStart.main(Native Method) 
05-24 17:52:20.414: I/dalvikvm(343): threadid=7: reacting to signal 3 
05-24 17:52:20.414: E/dalvikvm(343): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 
05-24 17:52:22.534: I/Process(343): Sending signal. PID: 343 SIG: 9 
+1

你的logcat有助於獲取異常導致強制關閉 – Abhi

+0

退出,由於未捕獲的異常05-24 17:52:20.404:E/AndroidRuntime(343 ):java.lang.NullPointerException 05-24 17:52:20.404:E/AndroidRuntime(343) 請參閱Bradford2000的答案 – matt5784

+1

無論您在第77行的代碼是什麼導致問題。我懷疑有一個對象在那裏是空的。 –

回答

1

檢查,以覈實upSound,downSound,leftSound,RightSound技術都被初始化(NOT NULL)使用它們

if (upSound != null) 
    upSound.start(); 

爲downSound,leftSound做之前,RightSound技術也

可以初始化在飛行的聲音,以確保如果聲音是空的它得到反正..

if (upSound == null) 
    upSound = MediaPlayer.create(Directions.this, R.raw.up_sound); 
    upSound.start(); 

此外,您的textView En_description也可能爲空,這也可能導致此崩潰。 確保無論您檢索En_description(使用findViewById)則成功完成

1

不確定這是否是您的問題,但您可以在執行v.getId()之前嘗試對v執行空值檢查。

if (v != null) 
{ 
    // Do switch statement 
} 
+0

除非他手動調用onClick「v」永遠不會爲空。它可能是upSound,downSound,對象爲null或En_description的一個爲null – dymmeh

+0

upSound = MediaPlayer.create(Directions.this,R.raw.up_sound); \t \t downSound = MediaPlayer.create(Directions.this,R.raw.down_sound); –

+0

事情是有效的,有時通常播放所有的聲音,但它似乎如果我點擊某些模式中的箭頭應用程序將強制關閉 –