目前开始学习MVVMKotlin。这个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'
}
数据绑定
dataBinding{
enabled=true
}
应用插件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: "org.jetbrains.kotlin.kapt"
apply plugin: 'kotlin-kapt'
我的activity_main.xml
<data>
<variable
name="viewModel"
type="com.example.rnd.kotlinmvvmlogin.ViewModel.LoginViewModel"/>
</data>
这是我的MVVM文件结构
MainActivity.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)
}
}
我理解MVVM的过程,但我不知道是什么原因,为什么这个错误不断发生。这个MVVM的教程是真正有助于理解mvvmKotlin这就是为什么我追求继续这个应用程序,使它的工作。
6条答案
按热度按时间qvk1mo1f1#
我有同样的问题。问题是在你的类型
type="com.example.rnd.kotlinmvvmlogin.ViewModel.LoginViewModel"
记住在数据绑定只Viewmodel类名应该以大写字母开始和其他父文件夹的一个类应该以小写字母开始。只要重命名ViewModel
与viewModel
。清除和重建项目。7z5jn7bk2#
很多人都会遇到这种情况,因为他们的包名称都是以大写字母开头的。重命名包名称,使其以小写字母开头,这样在视图Model类的引用路径中,只有视图Model类以大写字母开头
即
type="com.example.rnd.kotlinmvvmlogin.viewModel.LoginViewModel"
解决你的问题
jq6vz3qz3#
只需将软件包从
ViewModel
重命名为viewModel
,第一个字符必须是小写,这样就可以了。cu6pst1q4#
嘿,我看到你没有包括这个图书馆
我的依赖项
你试过写下面这样的代码吗
因为它需要一个可以为空的变量,但是你给它赋值了一个非空的变量
m3eecexj5#
问题是你的视图模型类使用的包名虽然谷歌称这种结构化设计模式为"MVVM",每个人都想在他们的项目中制作"Model","ViewModel"和"View"包,但当数据绑定库想为你生成文件时,会遇到包名的问题,所以你只需要更改目的地名称:
致:
或者其他任何东西。你也可以把"视图"改成"用户界面",这样以后就不会有问题了。
fgw7neuy6#
是的,这是非常不幸的,即使它被称为MVVM架构,你不能有一个包命名为“ViewModel”,“ViewModels”,“viewModels”,或在任何情况下类似的排序,否则它只是不会建立,它给你一个完全误导性的错误.