首页 新闻 搜索 专区 学院

安卓音乐播放器

0
悬赏园豆:100 [已解决问题] 解决于 2017-05-22 16:11

当一首歌播放完毕后,项目就终止了,想请问为什么以及怎么改。部分相关代码如下(如需要可提供更多):

 

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(); //播放
}

图片版(方便看):

 

感谢!

_kugua的主页 _kugua | 初学一级 | 园豆:112
提问于:2017-05-17 18:57
< >
分享
最佳答案
0

可能是在执行 play(t)时,t的值有问题,可以先输出一下看看t的值是什么

收获园豆:70
头一回 | 初学一级 |园豆:64 | 2017-05-20 16:08

首先谢谢!

下面是我的尝试

这样加了个输出(我还不会用 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 | 园豆:112 (初学一级) | 2017-05-21 19:12

@_kugua: 是不是没有触发setOnCompletionListener监听? 

头一回 | 园豆:64 (初学一级) | 2017-05-22 07:56

@_kugua: 2721851667 我qq可以一起探讨下

头一回 | 园豆:64 (初学一级) | 2017-05-22 13:42

@_kugua: 加了

头一回 | 园豆:64 (初学一级) | 2017-05-22 15:04
其他回答(1)
0

调试看Log信息,另外推荐使用create()方法:

String dataSource = musicList.get(pos).getUrl();
mPlayer = MediaPlayer.create(mContext, Uri.parse(dataSource));
mPlayer.setOnCompletionListener(completionListener);
mPlayer.setOnErrorListener(errorListener);
mPlayer.start();

收获园豆:30
(•̀ω•́)y | 园豆:232 (菜鸟二级) | 2017-05-18 09:27

首先谢谢!

我还不怎么会用Log信息,按下面的试了一下:

很奇怪的结果。

还有create()方法不是只能调用一次吗?

支持(0) 反对(0) _kugua | 园豆:112 (初学一级) | 2017-05-21 19:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册