Доступ к методу из класса приложения в Android Kotlin - PullRequest
0 голосов
/ 18 октября 2019


Я создал класс приложения в Котлине. Мне нужно получить доступ к методу, который возвращает переменную из любого места в моем приложении.
Проблема в том, что я не могу получить доступ к этому методу из других частей программы.
Я могу получить доступ, когда код написан на Java, но когда код написан на Kotlin, метод в классе Application недоступен.
Пожалуйста, найдите ниже код для справки:

class MyRetroApplication: Application () {

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

} }


В приведенном выше коде, как получить доступ к функции getMyComponent ()глобально в Котлине.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Поместите getMyComponen() внутрь компаньона, как @Md. Asaduzzaman ответ или используйте applicationContext для доступа к нему, как -

(application as MyRetroApplication).getMyComponent()

или

(applicationContext as MyRetroApplication).getMyComponent()

или

MyRetroApplication.ctx?.let{
(it as MyRetroApplication).getMyComponent()  //by your companion app context
}
0 голосов
/ 18 октября 2019

Подход-1:

Поместить 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...