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

时间:2015-03-12 05:50:38

标签: android android-mediaplayer

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

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。:我需要在第三个声音再次响起第一个

之后

日志:enter image description here

3 个答案:

答案 0 :(得分:2)

超出范围的例外,因为没有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替换i方法中的nextTrack,以便通过循环播放声音(声音[0],声音[1],声音[2],声音[ 0] ....)

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

请参阅%运营商的official doc

答案 1 :(得分:0)

你需要把条件放在onClick()中,在这里你需要确保数组索引应该总是小于数组的长度

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

答案 2 :(得分:0)

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

            @Override
            public void onClick(View v) {

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