当一首歌播放完毕后,项目就终止了,想请问为什么以及怎么改。部分相关代码如下(如需要可提供更多):
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
t = (t + 1) % (num);
play(t);
}
});
public void play(int pos) {
Music m = musicList.get(pos); //获取单击的对象
String music_url = m.getUrl(); //获得音乐路径
try {
mp.reset(); //播放器重置
mp.setDataSource(music_url); //播放器设置音乐源
mp.prepare(); //准备播放
} catch (Exception e) {
e.printStackTrace();
}
mp.start(); //播放
}
图片版(方便看):
感谢!
可能是在执行 play(t)时,t的值有问题,可以先输出一下看看t的值是什么
首先谢谢!
下面是我的尝试
这样加了个输出(我还不会用 logout调试):
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
t = (t + 1) % (num);
String s= String.valueOf(t);
System.out.println(s);
play(t);
}
});
然后结果信息中并没有预期的输出:
E/MediaPlayer: Should have subtitle controller already set
E/MediaPlayer: Should have subtitle controller already set
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test1, PID: 21167
java.lang.ArithmeticException: divide by zero
at com.example.test1.MainActivity$2.onCompletion(MainActivity.java:70)
at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2593)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5564)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
I/Process: Sending signal. PID: 21167 SIG: 9
Application terminated.
@_kugua: 是不是没有触发setOnCompletionListener监听?
@_kugua: 2721851667 我qq可以一起探讨下
@_kugua: 加了
调试看Log信息,另外推荐使用create()方法:
String dataSource = musicList.get(pos).getUrl();
mPlayer = MediaPlayer.create(mContext, Uri.parse(dataSource));
mPlayer.setOnCompletionListener(completionListener);
mPlayer.setOnErrorListener(errorListener);
mPlayer.start();
首先谢谢!
我还不怎么会用Log信息,按下面的试了一下:
很奇怪的结果。
还有create()方法不是只能调用一次吗?