為何出現此錯誤訊息?Type mismatch: inferred type is MyApplication.AppOpenAdManager but com.test.carcamping.AppOpenAdManager was expected,Cannot access 'appOpenAdManager': it is private in 'MyApplication'

 這個錯誤的主要原因是 appOpenAdManagerMyApplication 中是 private,導致 MainActivity 無法存取它。此外,你的 AppOpenAdManager 可能在不同的命名空間(package)中,導致型別不匹配。


解決方法

✅ 方案 1:將 appOpenAdManager 設為 public

MyApplication 中,將 appOpenAdManager 設為 publicval,確保外部可以存取:

kotlin
class MyApplication : Application() { lateinit var appOpenAdManager: AppOpenAdManager private set // 讓其他類別可以讀取,但不能修改 override fun onCreate() { super.onCreate() appOpenAdManager = AppOpenAdManager() appOpenAdManager.loadAd(applicationContext) // 預載廣告 } }

然後在 MainActivity 這樣存取:

kotlin
appOpenAdManager = (application as MyApplication).appOpenAdManager

✅ 方案 2:確保 AppOpenAdManager 的命名空間正確

如果 AppOpenAdManager 位於不同的 package,你應該檢查是否有多個 AppOpenAdManager 類別,並確保 import 正確。例如:

kotlin
import com.test.carcamping.AppOpenAdManager

如果 AppOpenAdManagerMyApplication 內部(巢狀類別),請確保它是 staticcompanion object 內的類別:

kotlin
class MyApplication : Application() { companion object { lateinit var appOpenAdManager: AppOpenAdManager } override fun onCreate() { super.onCreate() appOpenAdManager = AppOpenAdManager() appOpenAdManager.loadAd(applicationContext) } }

這樣在 MainActivity 就可以直接存取:

kotlin
appOpenAdManager = MyApplication.appOpenAdManager

總結

  • 錯誤原因:

    • appOpenAdManagerprivate

    • AppOpenAdManager 的類別型別不匹配(可能來自不同 package)

  • 解決方案:

    1. appOpenAdManager 設為 public(推薦 ✅)

    2. 確保 AppOpenAdManager 的 package 正確

    3. AppOpenAdManager 放入 companion object 使其變成全域變數

試試看這些方法,應該就能解決錯誤了!🚀

沒有留言:

張貼留言

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

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