如何修复 Android 中的 Kodein Force close 错误

How to fix Kodein Force close error in Android

为什么不帮助我的人?​​??

在我的应用程序中,我使用 Kotin 和 Kodein 进行 依赖注入
我写了下面的代码,但是当 运行 应用程序显示强制关闭错误时!

在我的应用程序中,我使用 Kotin 和 Kodein 进行 依赖注入
我写了下面的代码,但是当 运行 应用程序显示强制关闭错误时!

申请class代码:

class QuoteDiApp : Application(), KodeinAware {

    override val kodein = Kodein.lazy {
        bind<Database>() with singleton { DatabaseFakeImpl() }
        bind<QuoteDao>() with singleton { instance<Database>().quoteDao }
        bind<QuoteRepository>() with singleton { QuoteRepositoryImpl(instance()) }
        bind() from provider { QuotesViewModelFactory(instance()) }
    }
}

Activity class 代码:

class QuoteDiActivity : AppCompatActivity(), KodeinAware {

    override val kodein by closestKodein()
    private val viewModelFactory: QuoteViewModelFactory by instance()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_quote_di)

        initializeUi()
    }

    private fun initializeUi() {
        // Use ViewModelProviders class to create / get already created QuotesViewModel
        // for this view (activity)
        val viewModel = ViewModelProviders.of(this, viewModelFactory).get(QuoteViewModel::class.java)

        // Observing LiveData from the QuotesViewModel which in turn observes
        // LiveData from the repository, which observes LiveData from the DAO ☺
        viewModel.getQuotes().observe(this, Observer { quotes ->
            val stringBuilder = StringBuilder()
            quotes.forEach { quote ->
                stringBuilder.append("\n$quote")
            }
            textView_quotes.text = stringBuilder.toString()
        })

        // When button is clicked, instantiate a Quote and add it to DB through the ViewModel
        button_add_quote.setOnClickListener {
            val quote = Quote(editText_quote.text.toString(), editText_author.text.toString())
            viewModel.addQuote(quote)
            editText_quote.setText("")
            editText_author.setText("")
        }
    }
}

我把applicationclass初始化成Manifest

错误信息:

 Caused by: org.kodein.di.Kodein$NotFoundException: No binding found for bind<QuoteViewModelFactory>() with ? { ? }
Registered in this Kodein container:
        bind<QuoteDao>() with singleton { QuoteDao }
        bind<QuotesViewModelFactory>() with provider { QuotesViewModelFactory }
        bind<Database>() with singleton { DatabaseFakeImpl }
        bind<QuoteRepository>() with singleton { QuoteRepositoryImpl }

    at org.kodein.di.internal.KodeinContainerImpl.factory(KodeinContainerImpl.kt:174)
    at org.kodein.di.KodeinContainer$DefaultImpls.factory$default(KodeinContainer.kt:33)
    at org.kodein.di.KodeinContainer$DefaultImpls.provider(KodeinContainer.kt:80)
    at org.kodein.di.internal.KodeinContainerImpl.provider(KodeinContainerImpl.kt:7)
    at org.kodein.di.KodeinContainer$DefaultImpls.provider$default(KodeinContainer.kt:79)
    at org.kodein.di.KodeinAwareKt$Instance.invoke(KodeinAware.kt:152)
    at org.kodein.di.KodeinProperty$provideDelegate.invoke(properties.kt:39)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at nouri.mohammad.mvvm_kodeindi.with_di.ui.quotes.QuoteDiActivity.getViewModelFactory(QuoteDiActivity.kt)
    at nouri.mohammad.mvvm_kodeindi.with_di.ui.quotes.QuoteDiActivity.initializeUi(QuoteDiActivity.kt:30)
    at nouri.mohammad.mvvm_kodeindi.with_di.ui.quotes.QuoteDiActivity.onCreate(QuoteDiActivity.kt:24)
    at android.app.Activity.performCreate(Activity.java:5231)

在你的applicationclass你使用QuotesViewModelFactoryclass,但是在你activityclass你使用 QuoteViewModelFactory class.
这两个class是不匹配!
请检查你的classes和匹配两个classes!