為何出現此錯誤訊息?Too many arguments for public final fun showAdIfAvailable(activity: Activity): Unit defined in com.test.carcamping.MyApplication.AppOpenAdManager

 根據錯誤訊息,您依然遇到 showAdIfAvailable 方法簽名不匹配的問題,顯示「Too many arguments for public final fun showAdIfAvailable(activity: Activity): Unit」。

這表明,您的 AppOpenAdManager 類別的 showAdIfAvailable 方法定義仍然不正確,您可能在某些地方仍然使用了原本的簽名(只接受 Activity 參數),但傳遞了額外的 OnShowAdCompleteListener 參數。

解決方案:

您需要確保兩個地方保持一致:

  1. AppOpenAdManager 類別中,將 showAdIfAvailable 方法的簽名更新為接受 ActivityOnShowAdCompleteListener 兩個參數。

  2. 在調用 showAdIfAvailable 的地方,確保正確地傳遞 activityonShowAdCompleteListener

完整的修改方法:

1. AppOpenAdManager 類別修改:

kotlin
package com.test.carcamping import android.app.Activity import android.content.Context import android.util.Log import com.google.android.gms.ads.* import com.google.android.gms.ads.appopen.AppOpenAd import com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback import java.util.Date class AppOpenAdManager(private val context: Context) { private var appOpenAd: AppOpenAd? = null private var isLoadingAd = false var isShowingAd = false private set private var loadTime: Long = 0 init { loadAd() } fun loadAd() { if (isLoadingAd || isAdAvailable()) return isLoadingAd = true val request = AdRequest.Builder().build() AppOpenAd.load( context, AD_UNIT_ID, request, object : AppOpenAdLoadCallback() { override fun onAdLoaded(ad: AppOpenAd) { appOpenAd = ad isLoadingAd = false loadTime = Date().time Log.d(TAG, "onAdLoaded.") } override fun onAdFailedToLoad(loadAdError: LoadAdError) { isLoadingAd = false Log.d(TAG, "onAdFailedToLoad: ${loadAdError.message}") } } ) } // 修改此方法,接受 OnShowAdCompleteListener 參數 fun showAdIfAvailable(activity: Activity, onShowAdCompleteListener: OnShowAdCompleteListener) { if (!isAdAvailable()) { loadAd() onShowAdCompleteListener.onShowAdComplete() // 如果廣告尚未加載,立即回調 return } isShowingAd = true appOpenAd?.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { isShowingAd = false appOpenAd = null loadAd() onShowAdCompleteListener.onShowAdComplete() // 廣告關閉後回調 } override fun onAdFailedToShowFullScreenContent(adError: AdError) { isShowingAd = false onShowAdCompleteListener.onShowAdComplete() // 廣告顯示失敗回調 } override fun onAdShowedFullScreenContent() { isShowingAd = true } } appOpenAd?.show(activity) } private fun isAdAvailable(): Boolean { return appOpenAd != null && (Date().time - loadTime < 3600000) } companion object { private const val AD_UNIT_ID = "ca-app-pub-5794930542960145/1696703008" private const val TAG = "AppOpenAdManager" } } // 定義回調接口 interface OnShowAdCompleteListener { fun onShowAdComplete() }

2. 在調用 showAdIfAvailable 時的修改:

確保您在呼叫 showAdIfAvailable 時,傳遞了兩個參數:activityOnShowAdCompleteListener

kotlin
// 假設這是某個 Activity 或 Fragment 中的使用範例: fun showAd(activity: Activity) { val onShowAdCompleteListener = object : OnShowAdCompleteListener { override fun onShowAdComplete() { // 廣告顯示完成後的處理 Log.d("AppOpenAd", "廣告顯示完成") } } // 正確的調用方法,傳遞兩個參數 appOpenAdManager.showAdIfAvailable(activity, onShowAdCompleteListener) }

關鍵變更:

  1. showAdIfAvailable 方法簽名:現在此方法接受兩個參數:activity: ActivityonShowAdCompleteListener: OnShowAdCompleteListener

  2. 調用方法:確保您在調用 showAdIfAvailable 時,傳遞兩個參數。

這樣修改後,您就不會再收到「Too many arguments for public final fun showAdIfAvailable(activity: Activity)」的錯誤,並且 onShowAdCompleteListener 回調將能夠在廣告顯示完成後正確執行。

沒有留言:

張貼留言

excel 最大值用max,取最小值但要排除0,要怎麼寫?

 =MIN(IF(A1:A10<>0, A1:A10))