[英]Accessing a kotlin class auto-generated getter method in a retrofit implementation in an Android application
[英]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.