Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android应用程序在启动/停止媒体时崩溃_Java_Android - Fatal编程技术网

Java android应用程序在启动/停止媒体时崩溃

Java android应用程序在启动/停止媒体时崩溃,java,android,Java,Android,我正在写一个小的练习应用程序,当一个按钮被点击时,它会播放一段声音片段。在我前面的代码中,这相当于创建一个MediaPlayer对象,并调用mp.start()来启动音频。 这是可行的,但现在我希望只有在没有声音播放的时候才播放同一个按钮。如果正在播放声音,请停止音频。播放/停止按钮。 我尝试使用以下代码执行此操作: ``` 但是现在当我运行应用程序时,当我点击按钮时,应用程序崩溃。我哪里出错了?您没有初始化第一个mp对象,所以您看到了nullPointerException, 您可以删除第二个

我正在写一个小的练习应用程序,当一个按钮被点击时,它会播放一段声音片段。在我前面的代码中,这相当于创建一个MediaPlayer对象,并调用mp.start()来启动音频。 这是可行的,但现在我希望只有在没有声音播放的时候才播放同一个按钮。如果正在播放声音,请停止音频。播放/停止按钮。 我尝试使用以下代码执行此操作: ```


但是现在当我运行应用程序时,当我点击按钮时,应用程序崩溃。我哪里出错了?

您没有初始化第一个mp对象,所以您看到了nullPointerException,
您可以删除第二个mp对象,只需像这样更改代码

public void goButtonClicked(View v) {
    if(mp == null) {
        mp = MediaPlayer.create(getApplicationContext(), R.raw.wordt);
    }
    ....
}

这里发生的情况是,
MediaPlayer mp=…
表示您正在if条件中创建一个局部变量。但您的字段变量仍然为空。当应用程序执行第二个if条件时,它会抛出一个NullPointerException。

Logcat请。谢谢尝试在stop media player分支中添加
mp=null
。我认为
release()
不会使对象为空,因此在第一次单击之后,您永远不会输入第一个if。那么它应该会起作用(现在无法测试)。@chevalier我试过你的建议,但恐怕这没有解决它。我自己没有设备,我有个朋友在测试。由于AVD不是很容易接近,而且我完全失明,所以我有点不知所措。所以我只能写我认为有效的代码,部署包并祈祷。现在它在第一次敲击时就崩溃了,我似乎不明白为什么。哦,哇……业余爱好者的错误。我在本地重新定义了mp,但让外部mp指向null。非常感谢您的帮助:)
public void goButtonClicked(View v) {
    if(mp == null) {
        mp = MediaPlayer.create(getApplicationContext(), R.raw.wordt);
    }
    ....
}