発生した問題
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