Android Media Player后退按钮空指针崩溃

Android Media Player后退按钮空指针崩溃,android,nullpointerexception,android-mediaplayer,Android,Nullpointerexception,Android Mediaplayer,我的应用程序的其余部分运行得非常好,直到按下后退按钮停止并退出程序。我不知道这是代码行的这一部分还是在哪里,但这是DDMS logcat,下面是后退按钮编码。任何帮助都将不胜感激 05-03 18:32:35.597: W/KeyCharacterMap(475): No keyboard for id 0 05-03 18:32:35.597: W/KeyCharacterMap(475): Using default keymap: /system/usr/keychars/qwerty.k

我的应用程序的其余部分运行得非常好,直到按下后退按钮停止并退出程序。我不知道这是代码行的这一部分还是在哪里,但这是DDMS logcat,下面是后退按钮编码。任何帮助都将不胜感激

05-03 18:32:35.597: W/KeyCharacterMap(475): No keyboard for id 0
05-03 18:32:35.597: W/KeyCharacterMap(475): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-03 18:32:35.667: D/AndroidRuntime(475): Shutting down VM
05-03 18:32:35.677: W/dalvikvm(475): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-03 18:32:35.736: E/AndroidRuntime(475): FATAL EXCEPTION: main
05-03 18:32:35.736: E/AndroidRuntime(475): java.lang.NullPointerException
05-03 18:32:35.736: E/AndroidRuntime(475):  at com.mrj05hua.skylanders.SkylandersSoundboardActivity.onBackPressed(SkylandersSoundboardActivity.java:344)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.app.Activity.onKeyUp(Activity.java:1888)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.view.KeyEvent.dispatch(KeyEvent.java:1061)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.app.Activity.dispatchKeyEvent(Activity.java:2068)
05-03 18:32:35.736: E/AndroidRuntime(475):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.os.Looper.loop(Looper.java:123)
05-03 18:32:35.736: E/AndroidRuntime(475):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-03 18:32:35.736: E/AndroidRuntime(475):  at java.lang.reflect.Method.invokeNative(Native Method)
05-03 18:32:35.736: E/AndroidRuntime(475):  at java.lang.reflect.Method.invoke(Method.java:521)
05-03 18:32:35.736: E/AndroidRuntime(475):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-03 18:32:35.736: E/AndroidRuntime(475):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-03 18:32:35.736: E/AndroidRuntime(475):  at dalvik.system.NativeStart.main(Native Method)
05-03 18:32:39.327: I/Process(475): Sending signal. PID: 475 SIG: 9
05-03 18:36:59.016: D/dalvikvm(484): GC_EXTERNAL_ALLOC freed 873 objects / 61256 bytes in 96ms
05-03 18:36:59.316: D/dalvikvm(484): GC_EXTERNAL_ALLOC freed 276 objects / 13632 bytes in 70ms
05-03 18:36:59.626: D/dalvikvm(484): GC_EXTERNAL_ALLOC freed 139 objects / 7040 bytes in 82ms
05-03 18:36:59.936: D/dalvikvm(484): GC_EXTERNAL_ALLOC freed 88 objects / 4552 bytes in 78ms
05-03 18:37:00.416: D/dalvikvm(484): GC_EXTERNAL_ALLOC freed 96 objects / 5184 bytes in 92ms
05-03 18:37:00.826: D/dalvikvm(484): GC_EXTERNAL_ALLOC freed 101 objects / 5520 bytes in 90ms
05-03 18:37:35.257: W/KeyCharacterMap(484): No keyboard for id 0
05-03 18:37:35.257: W/KeyCharacterMap(484): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-03 18:37:35.336: D/AndroidRuntime(484): Shutting down VM
05-03 18:37:35.349: W/dalvikvm(484): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-03 18:37:35.427: E/AndroidRuntime(484): FATAL EXCEPTION: main
05-03 18:37:35.427: E/AndroidRuntime(484): java.lang.NullPointerException
05-03 18:37:35.427: E/AndroidRuntime(484):  at com.mrj05hua.skylanders.SkylandersSoundboardActivity.onBackPressed(SkylandersSoundboardActivity.java:344)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.app.Activity.onKeyUp(Activity.java:1888)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.view.KeyEvent.dispatch(KeyEvent.java:1061)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.app.Activity.dispatchKeyEvent(Activity.java:2068)
05-03 18:37:35.427: E/AndroidRuntime(484):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.os.Looper.loop(Looper.java:123)
05-03 18:37:35.427: E/AndroidRuntime(484):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-03 18:37:35.427: E/AndroidRuntime(484):  at java.lang.reflect.Method.invokeNative(Native Method)
05-03 18:37:35.427: E/AndroidRuntime(484):  at java.lang.reflect.Method.invoke(Method.java:521)
05-03 18:37:35.427: E/AndroidRuntime(484):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-03 18:37:35.427: E/AndroidRuntime(484):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-03 18:37:35.427: E/AndroidRuntime(484):  at dalvik.system.NativeStart.main(Native Method)
--


首先,你有一个多余的if语句

if (player.isPlaying()) 
...
else if (player.isPlaying())
...
您在这两个语句中检查相同的内容

接下来,获取空指针的原因是,当您试图访问它时,
player
可能为空

确保在访问播放器之前检查它是否为空

@Override 
public void onBackPressed(){
  if (player != null){
      if(player.isPlaying())
          player.stop();

      player.release();
  }

  //there is no reason to call super.finish(); here
  //call super.onBackPressed(); and it will finish that activity for you
  super.onBackPressed(); 
}

谢谢,我已经适应了这段代码,当玩家什么也不做,用户按下后退按钮强制关闭时,我仍然会遇到同样的错误。我知道答案!=表示不为null,但它不会接受player==null作为elseif命令。关于这个问题的这一部分有什么想法吗?尽管你的代码工作得很好,我还是在忘记的地方发现了错误,并放置了一个播放器。release();在on destroy中,在清除了这一点后,它运行得非常好。谢谢你帮我解开了那个长达一个月的谜语。
@Override 
public void onBackPressed(){
  if (player != null){
      if(player.isPlaying())
          player.stop();

      player.release();
  }

  //there is no reason to call super.finish(); here
  //call super.onBackPressed(); and it will finish that activity for you
  super.onBackPressed(); 
}