Android应用编译报错:reproducirSonidoCountDownTimer方法参数不匹配
解决CountDownTimer方法调用的参数不匹配错误
嘿,这个报错原因很明确——你写的reproducirSonidoCountDownTimer方法要求必须传入一个int类型的参数,但你在按钮点击事件里调用它的时候,只写了reproducirSonidoCountDownTimer(),没传任何参数,编译器自然会提示参数列表不匹配啦。
给你两个简单的修复方案,还顺便纠正一个代码里的逻辑小问题:
方案1:传入已有的成员变量
你已经在SeekBar的滑动监听里,把当前进度值存到了类的成员变量velocidadbpm里,所以点击按钮时直接把这个变量传进去就行:
修改按钮点击的代码块:
play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 传入SeekBar已经设置好的节拍值 reproducirSonidoCountDownTimer(velocidadbpm); } });
方案2:优化方法,去掉冗余参数
其实你的方法里把传入的参数又赋值给了成员变量this.velocidadbpm = velocidadbpm;,完全多此一举——既然成员变量已经能拿到SeekBar的进度值,不如直接修改方法,不用传参:
更新reproducirSonidoCountDownTimer方法:
public void reproducirSonidoCountDownTimer() { // 重点!你之前的间隔计算搞反了:BPM是每分钟节拍数,所以间隔=60000毫秒 / BPM int intervalo = 60000 / velocidadbpm; new CountDownTimer(60000, intervalo) { public void onTick(long millisUntilFinished){ reproducirSonido(); } public void onFinish(){ } }.start(); }
这样你原来的按钮调用代码reproducirSonidoCountDownTimer();就可以直接用了,不用修改。
另外一定要注意:你之前写的int intervalo = velocidadbpm * 60000;逻辑完全错误,比如100BPM的话,这个计算会得到6000000毫秒(100分钟)的间隔,这显然不是节拍器该有的效果,正确的计算应该是用60000除以BPM,这样才能得到每一拍的毫秒间隔。
内容的提问来源于stack exchange,提问作者Mauro Stancato
相关产品推荐
相关产品推荐

