You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:12:49