gpt4 book ai didi

android - 如何在kotlin android中访问 Activity 中的Application类变量

转载 作者:行者123 更新时间:2023-11-29 22:58:57 24 4
gpt4 key购买 nike

  • 我曾经使用一个访问应用程序类的私有(private)变量java中的公共(public)方法
  • 如何使用 kotlin 做同样的事情

App.kt

class App : Application() {


private var app: App? = null
private var movieAppComponent: MovieAppComponent? = null

override fun onCreate() {
super.onCreate()
app = this

movieAppComponent = DaggerMovieAppComponent.builder()
.applicationModule(ApplicationModule(this))
.netModule(NetModule(Keys.BASE_URL, this))
.build()
}

fun getApp(): App? {
return app
}

fun getMovieAppComponent(): MovieAppComponent? {
return movieAppComponent
}

}

MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
App.getApp().getMovieAppComponent().inject(this)
}



}

错误:

App.getApp().getMovieAppComponent().inject(this)

这里 getApp() 我得到的是 Unresolved reference

最佳答案

解决方案一:

class App : Application() {

private var movieAppComponent: MovieAppComponent? = null

companion object {
private var app: App? = null

fun getApp(): App? {
return app
}
}

override fun onCreate() {
super.onCreate()
app = this

movieAppComponent = DaggerMovieAppComponent.builder()
.applicationModule(ApplicationModule(this))
.netModule(NetModule(Keys.BASE_URL, this))
.build()
}

fun getMovieAppComponent(): MovieAppComponent? {
return movieAppComponent
}
}

解决方案 2:

不需要创建这样的方法。您可以在 Activity 中使用类型转换:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
(application as? App)?.getMovieAppComponent()?.inject(this)
}
}

关于android - 如何在kotlin android中访问 Activity 中的Application类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57130249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com