Java 安卓-Mediaplayer下一步按钮没有';行不通
我正在开发一个Android直播电台应用程序……我有一个包含4首曲目的数组,当我到达列表末尾时,假设“下一步”按钮将代表“最后一首歌”,但它不代表,并导致应用程序崩溃 以下是按钮代码:Java 安卓-Mediaplayer下一步按钮没有';行不通,java,android,Java,Android,我正在开发一个Android直播电台应用程序……我有一个包含4首曲目的数组,当我到达列表末尾时,假设“下一步”按钮将代表“最后一首歌”,但它不代表,并导致应用程序崩溃 以下是按钮代码: counter=0; mediaPlayer=new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); btn_next.setOnClickListener(new View.O
counter=0;
mediaPlayer=new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn_next.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (counter < songurl.length) {
counter = counter + 1;
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
} else {
Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show();
}
}
});
计数器=0;
mediaPlayer=新的mediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn_next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(计数器
还有一个问题。。。如果我想在应用程序到达最后一首歌曲时使其成为一个闭环,并且我想按“下一步”从头开始列表,我该怎么做?
谢谢。要进行循环,您应该在onclicklistener中检查if the counter是否等于songurl.length,我认为这是播放列表中的歌曲总数
int counter=0;
MediaPlayer mediaPlayer=new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn_next.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (counter < songurl.length) {
counter = counter + 1;
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
} else if(counter == songurl.length) {
counter = 0;
// Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show();
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
}
}
});
int计数器=0;
MediaPlayer=新的MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn_next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(计数器
在elseif条件下,我已将计数器设置为0。因此,它将进入循环。您遇到的一个问题是,在检查计数器是否在限制范围内后,您正在增加计数器,这意味着您的安全检查是无用的。移动
计数器=计数器+1
到if语句的末尾
要使其连续循环,可以将其更改为counter=(counter+1)%songurl.length代码>位于if语句体的末尾
在您所问问题的范围之外,您使用的MediaPlayer
存在一些问题。在catch语句中包含这么多关键逻辑没有任何意义。这意味着您期望异常发生。你应该重新考虑一下你在做什么。你可以简单地在代码中添加一个模(%)操作符
counter=counter++%songurl.length
无需添加额外的if-else块
btn_next.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
counter = counter++ % songurl.length
textview.setText(songurl[counter]);
try {
mediaPlayer.reset();
} catch (Exception ex) {
try {
mediaPlayer.setDataSource(songurl[counter]);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
}
});
您可以在catch块中调用mediaPlayer.setDataSource(songurl[counter])。
如果在调用mediaPlayer.reset()时它不会出现异常呢
试试这个:
try{
mediaPlayer.reset();
mediaPlayer.setDataSource();
mediaPlayer.prepareAsync();--or mediaPlayer.prepare();
(It depends on whether you load the url on the internet)
mediaPlayer.start(); -- if you call mediaPlayer.prepareAsync() you should call mediaPlayer.start() at the OnPreparedListener;
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
}
如果你还想知道的话,我建议你读一些关于MediaPlay状态的文章
PS如果mediaPlayer正在播放,您想让它播放另一个,请先调用mediaPlayer.stop() 另一个是,如果(计数器==4)计数器=0;此代码仍将以与原始代码相同的方式崩溃。您不应该检查计数器是否小于数组的长度,然后将其递增。请在第1行输入计数器=1,而不是计数器=0