【问题标题】:Accessing method from Application class in Kotlin Android从 Kotlin Android 中的 Application 类访问方法
【发布时间】:2019-10-18 04:29:46
【问题描述】:


我在 Kotlin 中创建了一个应用程序类。我需要访问从应用程序中的任何位置返回变量的方法。
问题是我无法从程序的其他部分访问该方法。
当代码用 Java 编写时,我可以访问,但是当代码用 Kotlin 编写时,Application 类中的方法无法访问。
请参考以下代码:

类 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

} }


在上面的代码中,如何在 Kotlin 中全局访问函数 getMyComponent()。

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    getMyComponen() 放在像@Md 这样的伴侣中。 Asaduzzaman 回答或使用 applicationContext 来访问它 -

    (application as MyRetroApplication).getMyComponent()
    

    (applicationContext as MyRetroApplication).getMyComponent()
    

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

    【讨论】:

      【解决方案2】:

      方法一:

      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(私有)

      companion object {
          private lateinit var ctx: MyRetroApplication
      
          fun getInstance(): MyRetroApplication {
              return ctx
          }
      }
      

      然后从任何地方:

      MyRetroApplication.getInstance().getMyComponent()
      

      【讨论】:

        猜你喜欢
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        相关资源
        最近更新 更多