0

My app fall in runtime when I open fragment. Error: lateinit property viewModelFactory has not been initialized

class DetailCharacterFragment : Fragment() {
private val viewModel: CharacterViewModel by viewModels {
        CharacterViewModel.provideFactory(myRepository = CharactersRepository(RetrofitNetwork.getNetworkApi()), this)
    }

AppComponent

@Singleton
@Component(modules = [
    AndroidInjectionModule::class,
    AppModule::class]
)

interface AppComponent : AndroidInjector<RickAndMortyApplication> {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): AppComponent
    }
    override fun inject(app: RickAndMortyApplication)

Application:

class RickAndMortyApplication: DaggerApplication() {
    private val applicationInjector = DaggerAppComponent.builder().application(this).build()
    override fun applicationInjector(): AndroidInjector<out DaggerApplication> = applicationInjector

AppModule

@Module (
    includes = [
        ViewModelModule::class]
        )
class AppModule

ViewModelFactory

@Singleton
class ViewModelFactory @Inject constructor(
    private val creators: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        val creator = creators[modelClass] ?: creators.entries.firstOrNull {
            modelClass.isAssignableFrom(it.key)
        }?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
        try {
            @Suppress("UNCHECKED_CAST")
            return creator.get() as T
        } catch (e: Exception) {
            throw RuntimeException(e)
        }
    }
}

I try make as here: https://github.com/ronnieotieno/Dagger-2-Mvvm-Android/tree/master/app/src/main/java/dev/ronnie/imageloaderdagger2

That's my first expirence with Dagger.

0 Answers0