1
0

More than 3 years have passed since last update.

Dagger2 でのエラー対処 kotlin.UninitializedPropertyAccessException: lateinit property mainViewModelFactory has not been initialized

Posted at

 発生した問題

Dagger2 で AppCom
@Injectでの依存関係の定義
@Module, @Providesで依存関係を解決するためのインスタンスの提供
@Componentで複数のModuleを用いて依存解決用の Object の生成
上記のことを行ったにもかかわらず、初期化ができていないと下記のエラーが発生する


    java.lang.RuntimeException: Unable to start activity 
    ComponentInfo{com.example.higuuugithubapi/com.example.higuuugithubapi.main.MainActivity}:
      kotlin.UninitializedPropertyAccessException: 
      lateinit property mainViewModelFactory has not been initialized
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: kotlin.UninitializedPropertyAccessException: lateinit property mainViewModelFactory has not been initialized
        at com.example.higuuugithubapi.main.MainActivity.getMainViewModelFactory(MainActivity.kt:18)
        at com.example.higuuugithubapi.main.MainActivity$mainViewModel$2.invoke(MainActivity.kt:19)
        at com.example.higuuugithubapi.main.MainActivity$mainViewModel$2.invoke(MainActivity.kt:15)
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:52)
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)
        at com.example.higuuugithubapi.main.MainActivity.getMainViewModel(Unknown Source:2)
        at com.example.higuuugithubapi.main.MainActivity.onCreate(MainActivity.kt:31)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 

解決策

AndroidInjection.inject(this) をonCreate内に追加していないのが原因だった。
AndroidInjcection が App クラスから AndroidInjector を取ってこないと Inject できません。

MainActivity
    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)

ソースコード: https://github.com/higuuu/higuuu-github-api/commit/f9c73d67688c539da1355dd70ff914cd11232636

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0