Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 在MediaPlayer中连续播放声音时应用程序崩溃_Java_Android - Fatal编程技术网

Java 在MediaPlayer中连续播放声音时应用程序崩溃

Java 在MediaPlayer中连续播放声音时应用程序崩溃,java,android,Java,Android,我在这里找到以下代码作为问题的答案 当我运行它时,会播放3种声音,但随后应用程序会随着消息关闭 不幸的是,应用程序已停止 onCompletion方法中是否缺少某些内容 public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener { int[] tracks = new int[3]; int currentTrack = 0; private MediaP

我在这里找到以下代码作为问题的答案

当我运行它时,会播放3种声音,但随后应用程序会随着消息关闭

不幸的是,应用程序已停止

onCompletion
方法中是否缺少某些内容

public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener {

    int[] tracks = new int[3];
    int currentTrack = 0;
    private MediaPlayer mediaPlayer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tracks[0] = R.raw.p46;
        tracks[1] = R.raw.p52;
        tracks[2] = R.raw.p55;
        mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
        mediaPlayer.setOnCompletionListener(this);
        mediaPlayer.start();
    }

    public void onCompletion(MediaPlayer arg0) {
        arg0.release();
        if (currentTrack < tracks.length) {
            currentTrack++;
            arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
            arg0.setOnCompletionListener(this);
            arg0.start();
        }
    }
公共类MainActivity扩展活动实现MediaPlayer.OnCompletionListener{
int[]轨道=新int[3];
int currentTrack=0;
私有媒体播放器MediaPlayer=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
磁道[0]=R.raw.p46;
轨迹[1]=R.raw.p52;
轨迹[2]=R.raw.p55;
mediaPlayer=mediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
mediaPlayer.setOnCompletionListener(此);
mediaPlayer.start();
}
完成时的公共作废(MediaPlayer arg0){
arg0.release();
if(当前轨道<轨道长度){
currentTrack++;
arg0=MediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
arg0.setOnCompletionListener(此);
arg0.start();
}
}
更改此选项:

public void onCompletion(MediaPlayer arg0) {
        arg0.release();
        if (currentTrack < tracks.length) {
            currentTrack++;
            arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
            arg0.setOnCompletionListener(this);
            arg0.start();
        }
    }
public void onCompletion(MediaPlayer arg0){
arg0.release();
if(当前轨道<轨道长度){
currentTrack++;
arg0=MediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
arg0.setOnCompletionListener(此);
arg0.start();
}
}
致:

public void onCompletion(MediaPlayer arg0){
arg0.release();
currentTrack++;
if(当前轨道<轨道长度){
arg0=MediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
arg0.setOnCompletionListener(此);
arg0.start();
}
}

基本上你得到的是一个
ArrayIndexOutofBoundException
,因为最后currentTrack是3,索引3中没有任何项目,即第4个项目

,我认为这只是你的if语句中的一个错误。你在范围检查后递增
currentTrack
,导致了一个越界异常。我认为错误可能会出现g来自'arg0.setOnCompletionListener(this);'在您的onCompletion方法中,尝试删除它,看看它在第一首歌后是否不会引发错误。这解决了问题,但现在如果我将声音播放代码从onCreate移动到ButtontTapped,应用程序将再次崩溃。'public void ButtontTapped(View){tracks[0]=R.raw.pianoff46;曲目[1]=R.raw.pianoff52;曲目[2]=R.raw.pianoff55;mediaPlayer=mediaPlayer.create(getApplicationContext(),曲目[currentTrack]);mediaPlayer.setOnCompletionListener(this);mediaPlayer.start();}这是一个不同的问题,请打开另一个问题,也请张贴stacktrace这一次每个答案都有一个检查按钮点击
public void onCompletion(MediaPlayer arg0) {
        arg0.release();
        currentTrack++;
        if (currentTrack < tracks.length) {

            arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
            arg0.setOnCompletionListener(this);
            arg0.start();
        }
    }