无法访问类“viewModel”。检查您的模块类路径是否缺少或冲突的依赖项

Kin*_* RG 2 mvvm kotlin android-studio

目前开始学习MVVM Kotlin。这个youtube教程非常令人困惑,但直截了当。

https://www.youtube.com/watch?v=0LaUXQcGuT0&t=254s

我的标题中有这个错误。

这段代码触发了我的错误 MainActivity

在此处输入图片说明

所以这是我的Module:app( build.gradle)

依赖关系

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

//Config data binding compiler with Kotlin
kapt 'com.android.databinding:compiler:3.1.1'

//LifeCycle Extensions
implementation 'android.arch.lifecycle:extensions:1.1.1'

//Toasty to show Toast
implementation 'com.github.GrenderG:Toasty:1.2.8'
}
Run Code Online (Sandbox Code Playgroud)

数据绑定

dataBinding{
    enabled=true
}
Run Code Online (Sandbox Code Playgroud)

应用插件

  apply plugin: 'com.android.application'

  apply plugin: 'kotlin-android'

  apply plugin: 'kotlin-android-extensions'

  apply plugin: "org.jetbrains.kotlin.kapt"

  apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)

我的 activity_main.xml

<data>
    <variable
            name="viewModel"
            type="com.example.rnd.kotlinmvvmlogin.ViewModel.LoginViewModel"/>
</data>
Run Code Online (Sandbox Code Playgroud)

这是我的 MVVM 文件结构

在此处输入图片说明

主活动.kt

package com.example.rnd.kotlinmvvmlogin.View

import android.arch.lifecycle.ViewModelProviders
import android.databinding.DataBindingUtil
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.rnd.kotlinmvvmlogin.Interface.LoginResultCallbacks
import com.example.rnd.kotlinmvvmlogin.R
import com.example.rnd.kotlinmvvmlogin.ViewModel.LoginViewModel 
import com.example.rnd.kotlinmvvmlogin.ViewModel.LoginViewModelFactory
import com.example.rnd.kotlinmvvmlogin.databinding.ActivityMainBinding
import es.dmoral.toasty.Toasty

class MainActivity : AppCompatActivity(), LoginResultCallbacks {
override fun onSuccess(message: String) {
    Toasty.success(this, message, Toast.LENGTH_SHORT)
        .show()
}

override fun onError(message: String) {
    Toasty.error(this, message, Toast.LENGTH_SHORT)
        .show()
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val activityMainBinding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
    activityMainBinding.viewModel = ViewModelProviders.of(this, LoginViewModelFactory(this))
        .get(LoginViewModel::class.java)
}
 }
Run Code Online (Sandbox Code Playgroud)

我了解 MVVM 的过程,但我不知道此错误不断发生的原因是什么。这个 MVVM 的教程对于理解 mvvm kotlin 真的很有帮助,这就是我追求继续这个应用程序以使其工作的原因。

Rah*_*rma 5

我有同样的问题。问题在于您的类型type="com.example.rnd.kotlinmvvmlogin.ViewModel.LoginViewModel" 请记住,仅在数据绑定中 Viewmodel 类名称应以大写字母开头,类的其他父文件夹应以小写字母开头。只需ViewModelviewModel. 清除并重建项目。