Android android.media.PlayerBase.PlaybackDetectionCallBack NullPointerException
Android android.media.PlayerBase.PlaybackDetectionCallBack NullPointerException
我的应用程序仅在体内崩溃 phones,错误日志是这样的:
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String android.content.Context.getOpPackageName()' on a
null object reference at
android.media.PlayerBase.PlaybackDetectionCallBack(PlayerBase.java:348)
at android.media.PlayerBase.baseStop(PlayerBase.java:229) at
android.media.MediaPlayer.onCompletion(MediaPlayer.java:3578) at
android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3351)
at android.os.Handler.dispatchMessage(Handler.java:106) at
android.os.Looper.loop(Looper.java:192) at
android.app.ActivityThread.main(ActivityThread.java:6671) at
java.lang.reflect.Method.invoke(Native Method) at
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)
我相信这是关于 MediaPlayer
我用来在我的应用程序中播放 BGM 的东西。
但我不知道这是怎么发生的,因为错误堆栈没有检索到我的代码。
这是我所有关于播放 BGM 的代码。
public void playBgm(final int resId, boolean restartIfSame) {
if(resId == currentBgmRes && !restartIfSame) {
if(!bgmPlayer.isPlaying()) {
bgmPlayer.start();
}
return;
}
if(bgmPlayer.isPlaying()) {
bgmPlayer.stop();
}
_playBgm(resId);
}
private void _playBgm(int resId) {
bgmPlayer.release();
bgmPlayer = MediaPlayer.create(this, resId);
bgmPlayer.setLooping(true);
currentBgmRes = resId;
bgmPlayer.start();
}
两个函数都在class AppDelegate extends Application
里面,所以this
应该是应用实例
它并不总是崩溃。由于导致问题的 phone 是一些远方用户的,所以几天后我无法获得 phone 。所以我不确定它会在什么情况下发生,但在任何情况下都不应该发生。
我找到问题了。
我的 MediaPlayer
变量有一个初始值 new MediaPlayer()
。
当播放BGM的Activity
叫onPause()
时,我叫MediaPlayer.pause()
。
但是调用 pause()
到 new MediaPlayer()
似乎会导致某些设备崩溃,而在其他设备上正常。
我将初始值更改为null
,并在每次使用该对象时进行空检查。崩溃再也不会发生了。
我的应用程序仅在体内崩溃 phones,错误日志是这样的:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getOpPackageName()' on a null object reference at android.media.PlayerBase.PlaybackDetectionCallBack(PlayerBase.java:348) at android.media.PlayerBase.baseStop(PlayerBase.java:229) at android.media.MediaPlayer.onCompletion(MediaPlayer.java:3578) at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3351) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:192) at android.app.ActivityThread.main(ActivityThread.java:6671) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)
我相信这是关于 MediaPlayer
我用来在我的应用程序中播放 BGM 的东西。
但我不知道这是怎么发生的,因为错误堆栈没有检索到我的代码。
这是我所有关于播放 BGM 的代码。
public void playBgm(final int resId, boolean restartIfSame) {
if(resId == currentBgmRes && !restartIfSame) {
if(!bgmPlayer.isPlaying()) {
bgmPlayer.start();
}
return;
}
if(bgmPlayer.isPlaying()) {
bgmPlayer.stop();
}
_playBgm(resId);
}
private void _playBgm(int resId) {
bgmPlayer.release();
bgmPlayer = MediaPlayer.create(this, resId);
bgmPlayer.setLooping(true);
currentBgmRes = resId;
bgmPlayer.start();
}
两个函数都在class AppDelegate extends Application
里面,所以this
应该是应用实例
它并不总是崩溃。由于导致问题的 phone 是一些远方用户的,所以几天后我无法获得 phone 。所以我不确定它会在什么情况下发生,但在任何情况下都不应该发生。
我找到问题了。
我的 MediaPlayer
变量有一个初始值 new MediaPlayer()
。
当播放BGM的Activity
叫onPause()
时,我叫MediaPlayer.pause()
。
但是调用 pause()
到 new MediaPlayer()
似乎会导致某些设备崩溃,而在其他设备上正常。
我将初始值更改为null
,并在每次使用该对象时进行空检查。崩溃再也不会发生了。