在Android上使用Dagger2时为什么不显示数据
在我的应用程序中,我希望使用Dagger2,我希望只显示服务器上的一个图像,而对于显示图像,我使用了毕加索在Android上使用Dagger2时为什么不显示数据,android,kotlin,dagger-2,picasso,Android,Kotlin,Dagger 2,Picasso,在我的应用程序中,我希望使用Dagger2,我希望只显示服务器上的一个图像,而对于显示图像,我使用了毕加索 我写了下面的代码,但在运行应用程序后,不会将任何图像显示到imageview 对于android,我使用Kotlin语言。 应用程序类: class App : Application() { var component: AppComponent? = null override fun onCreate() { super.onCreate()
我写了下面的代码,但在运行应用程序后,不会将任何图像显示到
imageview
对于android,我使用Kotlin语言。
应用程序类:
class App : Application() {
var component: AppComponent? = null
override fun onCreate() {
super.onCreate()
//Init dagger component
component = DaggerAppComponent.builder().modulePicasso(ModulePicasso(this)).build()
}
fun getAppComponent(): AppComponent? {
return component
}
}
活动类:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
App().getAppComponent()?.getPicasso()?.load("https://cdn01.zoomit.ir/2017/6/5f0e97c1-9eb7-4176-aa02-35252489ede8.jpg")
?.into(imageView)
}
}
如何修复它?我认为这是因为您正在创建应用程序类的新实例,例如
App()
,然后调用getAppComponent()
,它肯定会返回null
,因为您不应该自己构建应用程序实例,而是访问引用它的静态属性
要修复它,您需要向
App
类添加一个静态属性(instance
),并使用该属性获取AppComponent
。谢谢亲爱的,我也这么认为。您可以帮助我并向我发送代码吗?基本上,您可以在App
类中的伴生对象中定义lateinit var实例:App
。然后,在onCreate
中初始化:instance=this
。你可以看看这个答案()来获得灵感。好吧,你不需要调用App().appComponent
,而是调用App.instance.appComponent
,你应该使用注入模式来向你的活动类中注入和依赖项。就毕加索而言,我认为你不需要为此使用注入,除非你在毕加索方法中做一些中间件工作。只要做一个毕加索。get()。对于kotlin依赖注入,我建议看看kodein或koin。它更简单,可以在很大程度上完成你的工作。