在Android上使用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()

在我的应用程序中,我希望使用Dagger2,我希望只显示服务器上的一个图像,而对于显示图像,我使用了毕加索
我写了下面的代码,但在运行应用程序后,不会将任何图像显示到
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。它更简单,可以在很大程度上完成你的工作。