Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Kotlin + dagger2でUninitializedPropertyAccessExceptionが出た時の対処

More than 1 year has passed since last update.

概要

Kotlin で dagger2を試している時に
UninitializedPropertyAccessException: lateinit property hogeViewModel has not been initialized
が発生。他のActivityではできるのになぜ?ってなったので備忘録

原因

他のActivityではDaggerAppCompatActivityを継承しているのに
AppCompatActivityを継承してた。。。
という初歩的なミス

別の解決法

activity.kt
class HogeActivity : AppCompatActivity() {
@Inject
    lateinit var hogeViewModel: HogeViewModel

override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)//←追加
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_hoge)
        hogeViewModel.getHogeFromApi~~~//以下略
    }
}

DaggerAppCompatActivityはAndroidInjection.inject(this)をonCreateでやってくれているBaseクラスなので、AppCompatActivityを継承したクラスのonCreateでAndroidInjection.inject(this)を追加しても解決します。

まだまだ、DIの勉強不足が否めない。

best-teacher-inc
SpeakingとWritingをネイティブ講師に学べる24時間体制のオンライン英会話「Best Teacher」を開発・運営するスタートアップ
https://www.best-teacher-inc.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away