打破声音的循环。怎么修?

Break the cycle of sounds. How to fix?

我在列表中的按钮上发出了声音

int i = 0;
...
void nextTrack(int i)
    {   
        mSound = new int [] {
                R.raw.error_one, 
                R.raw.error_two, 
                R.raw.error_three
                };
        mp = MediaPlayer.create(getActivity(), mSound[i]);      
        mp.start();
    }
...
@Override
public void onClick(View v) {
nextTrack(i);
i++;
}

但是在声音R.raw.error_three之后,应用程序崩溃了。

UPD.: 我需要在第三声后再次响起第一声

日志。:

您需要在 onClick() 中设置条件,在这里您需要确保数组索引应始终小于数组的长度

               @Override
                public void onClick(View v) {
                    if(i < mSound.length){
                        nextTrack(i);
                        i++;
                    }
                }

越界异常,因为没有mSound[3],只有0-2,共3个元素

void nextTrack(int i) {   
    mSound = new int [] {
                R.raw.error_one, 
                R.raw.error_two, 
                R.raw.error_three
                };
    mp = MediaPlayer.create(getActivity(), mSound[i % 3]);      
    mp.start();
}

可以用i % 3代替nextTrack方法中的i,这样声音循环播放(sound[0],sound[1],sound[2],声音[0]...)

使用i % 3,因此值将始终为012

参见 % 运算符的 official doc

我猜你想在 Sound 3 之后再次播放 Sound 1。然后只需添加如下内容:

            @Override
            public void onClick(View v) {

                    nextTrack(i);
                    i++;
                    if(i > mSound.length)
                        i = 0;
                }
            }