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

RewardVideoListener未重写onRewardedVideoCompleted()抽象方法报错求助

解决RewardVideoListener未重写抽象方法的报错问题

这个报错的核心原因很明确:在Java里实现接口时,必须重写该接口定义的所有抽象方法。你的RewardVideoListener类实现了RewardedVideoAdListener接口,但漏掉了其中的onRewardedVideoCompleted()方法,所以编译器抛出了这个错误。

完整修正后的代码

我保留了你原有代码的结构和逻辑,补充了所有接口要求的抽象方法(包括遗漏的onRewardedVideoCompleted()),你可以直接参考使用:

package name.ratson.cordova.admob.rewardvideo;

import android.util.Log;
import com.google.android.gms.ads.reward.RewardItem;
import com.google.android.gms.ads.reward.RewardedVideoAdListener;
import org.json.JSONException;
import org.json.JSONObject;
import name.ratson.cordova.admob.AbstractExecutor;

class RewardVideoListener implements RewardedVideoAdListener {
    private final RewardVideoExecutor executor;

    RewardVideoListener(RewardVideoExecutor executor) {
        this.executor = executor;
    }

    // 补全遗漏的核心方法
    @Override
    public void onRewardedVideoCompleted() {
        Log.d("RewardVideo", "奖励视频播放完成");
        // 可根据业务需求添加回调逻辑,比如通知Cordova的JS层
        try {
            executor.sendPluginResult("rewardedVideoCompleted", new JSONObject());
        } catch (JSONException e) {
            Log.e("RewardVideo", "创建回调JSON失败", e);
        }
    }

    // 以下是接口要求的其他抽象方法,必须全部重写
    @Override
    public void onRewardedVideoAdLoaded() {
        Log.d("RewardVideo", "奖励视频广告加载完成");
        // 这里可以添加你的原有逻辑或补充逻辑
    }

    @Override
    public void onRewardedVideoAdOpened() {
        Log.d("RewardVideo", "奖励视频广告已打开");
        // 这里可以添加你的原有逻辑或补充逻辑
    }

    @Override
    public void onRewardedVideoStarted() {
        Log.d("RewardVideo", "奖励视频开始播放");
        // 这里可以添加你的原有逻辑或补充逻辑
    }

    @Override
    public void onRewarded(RewardItem rewardItem) {
        Log.d("RewardVideo", "获得奖励:" + rewardItem.getType() + " - " + rewardItem.getAmount());
        // 处理奖励发放逻辑,比如通知JS层用户获得的奖励
        try {
            JSONObject rewardObj = new JSONObject();
            rewardObj.put("type", rewardItem.getType());
            rewardObj.put("amount", rewardItem.getAmount());
            executor.sendPluginResult("reward", rewardObj);
        } catch (JSONException e) {
            Log.e("RewardVideo", "创建奖励JSON失败", e);
        }
    }

    @Override
    public void onRewardedVideoAdClosed() {
        Log.d("RewardVideo", "奖励视频广告已关闭");
        // 这里可以添加你的原有逻辑或补充逻辑
    }

    @Override
    public void onRewardedVideoAdFailedToLoad(int errorCode) {
        Log.e("RewardVideo", "奖励视频广告加载失败,错误码:" + errorCode);
        // 处理加载失败逻辑,比如通知JS层错误信息
        try {
            JSONObject errorObj = new JSONObject();
            errorObj.put("errorCode", errorCode);
            executor.sendPluginResult("rewardedVideoFailed", errorObj);
        } catch (JSONException e) {
            Log.e("RewardVideo", "创建错误JSON失败", e);
        }
    }

    // 部分版本的Google Play Services会要求这个方法,一并重写避免报错
    @Override
    public void onRewardedVideoAdLeftApplication() {
        Log.d("RewardVideo", "用户在播放奖励视频时离开应用");
        // 这里可以添加你的原有逻辑或补充逻辑
    }
}

关键注意事项

  1. @Override注解:给每个重写的方法加上@Override注解,编译器会帮你检查方法签名是否匹配接口定义,避免拼写错误。
  2. 业务逻辑补充:你可以根据自己的需求,在每个方法中添加对应的业务处理(比如通过executor给Cordova的JS层发送回调)。
  3. 版本兼容:不同版本的Google Play Services可能会有细微的方法差异,如果还有报错,检查是否有其他遗漏的抽象方法,一并补全即可。

内容的提问来源于stack exchange,提问作者Bhadresh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:16:22