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", "用户在播放奖励视频时离开应用"); // 这里可以添加你的原有逻辑或补充逻辑 } }
关键注意事项
- @Override注解:给每个重写的方法加上
@Override注解,编译器会帮你检查方法签名是否匹配接口定义,避免拼写错误。 - 业务逻辑补充:你可以根据自己的需求,在每个方法中添加对应的业务处理(比如通过
executor给Cordova的JS层发送回调)。 - 版本兼容:不同版本的Google Play Services可能会有细微的方法差异,如果还有报错,检查是否有其他遗漏的抽象方法,一并补全即可。
内容的提问来源于stack exchange,提问作者Bhadresh
相关产品推荐
相关产品推荐

