簡體   English   中英

從 Kotlin Android 中的應用程序 class 訪問方法

[英]Accessing method from Application class in Kotlin Android


我在 Kotlin 中創建了一個應用程序 class。 我需要訪問從應用程序中的任何位置返回變量的方法。
問題是我無法從程序的其他部分訪問該方法。
當代碼寫在 Java 中時,我可以訪問,但是當代碼寫在 Kotlin 中時,則無法訪問應用程序 class 中的方法。
請找到以下代碼以供參考:

class MyRetroApplication:應用程序(){

lateinit var apiComponent:APIComponent
companion object {
    var ctx: Context? = null
}
override fun onCreate() {
    super.onCreate()
    ctx = applicationContext
    apiComponent = initDaggerComponent()

}

fun getMyComponent(): APIComponent {
    return apiComponent
}

fun initDaggerComponent():APIComponent{
    apiComponent =   DaggerAPIComponent
        .builder()
        .aPIModule(APIModule(APIURL.BASE_URL))
        .build()
    return  apiComponent

} }


在上面的代碼中,如何在 Kotlin 中全局訪問 function getMyComponent()。

方法一:

getMyComponent()放在同伴里面

companion object {
    var ctx: Context? = null
    private lateinit var apiComponent: APIComponent

    fun getMyComponent(): APIComponent = apiComponent
}

然后從任何地方:

MyRetroApplication.getMyComponent()

方法2:

ctx的類型更改為MyRetroApplication而不是Context ,然后從任何地方更改:

MyRetroApplication.ctx.getMyComponent()

方法3:

與方法 2 相同,但以正式的方式。 在同伴內部創建getInstance()並傳遞ctx (private)

companion object {
    private lateinit var ctx: MyRetroApplication

    fun getInstance(): MyRetroApplication {
        return ctx
    }
}

然后從任何地方:

MyRetroApplication.getInstance().getMyComponent()

getMyComponen()放在 @Md 之類的同伴中。 Asaduzzaman 回答或使用 applicationContext 來訪問它,就像 -

(application as MyRetroApplication).getMyComponent()

或者

(applicationContext as MyRetroApplication).getMyComponent()

或者

MyRetroApplication.ctx?.let{
(it as MyRetroApplication).getMyComponent()  //by your companion app context
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM