打破声音的循环。怎么修?
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
,因此值将始终为0
、1
或2
。
参见 %
运算符的 official doc。
我猜你想在 Sound 3 之后再次播放 Sound 1。然后只需添加如下内容:
@Override
public void onClick(View v) {
nextTrack(i);
i++;
if(i > mSound.length)
i = 0;
}
}
我在列表中的按钮上发出了声音
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
,因此值将始终为0
、1
或2
。
参见 %
运算符的 official doc。
我猜你想在 Sound 3 之后再次播放 Sound 1。然后只需添加如下内容:
@Override
public void onClick(View v) {
nextTrack(i);
i++;
if(i > mSound.length)
i = 0;
}
}