无法创建类的实例-ViewModel [英] Cannot create an instance of class - ViewModel
本文介绍了无法创建类的实例-ViewModel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在跟踪google的示例,该示例在Java中,但是当我在kotlin中重写它时,无法实例化该类. 我正在学习视图模型.我是否怀疑我的 kotlin 代码的语法是否正确.
I'm following an example of google, the example is in java but when I rewrite it in kotlin I can not instantiate the class. I am learning viewmodel. I have a lot of doubt if I messed up the syntax of my kotlin code.
https://github.com/googlecodelabs/android-room-with -a-视图
类MainActivity:AppCompatActivity(){
class MainActivity: AppCompatActivity() {
// private lateinit var mWordViewModel: WordViewModel //not works
private var mWordViewModel: WordViewModel? = null //not works
private var wordListAdapter: WordListAdapter?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
try {
mWordViewModel = ViewModelProviders.of(this@MainActivity).get(WordViewModel::class.java)
}catch (e: Exception){
e.printStackTrace()
}
...
class WordViewModel(application: Application): AndroidViewModel(application) {
// super(application)
private var mRepository: WordRepository? = null
private var mAllWords: LiveData<List<Word>>? = null
init {
mRepository = WordRepository(application)
mAllWords = mRepository?.getAllWords()
}
...
class WordRepository(application: Application) {
private var mWordDao: WordDao? = null
private var mAllWords: LiveData<List<Word>>? = null
init {
val db = WordRoomDatabase.getDatabase(application)
mWordDao = db.wordDao()
mAllWords = mWordDao!!.getAlphabetizeWords()
}
...
@Database(entities = arrayOf(Word::class), version = 1)
abstract class WordRoomDatabase: RoomDatabase(){
abstract fun wordDao(): WordDao
companion object {
@JvmStatic
private var INSTANCE: WordRoomDatabase? = null
fun getDatabase(context: Context): WordRoomDatabase {
if (INSTANCE == null) {
synchronized(WordRoomDatabase::class.java) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.applicationContext, WordRoomDatabase::class.java, "word_database")
.fallbackToDestructiveMigration()
.addCallback(sRoomDatabaseCallback)
.build()
}
}
}
return INSTANCE!!
}
推荐答案
@zunjae
错误
1-语法代码koltin.
1 - Syntax code koltin.
2-项目配置.
class MainActivity: AppCompatActivity() {
mWordViewModel = ViewModelProviders.of(this@MainActivity).get(WordViewModel(application)::class.java)
...
class WordViewModel constructor (application: Application): AndroidViewModel(application){
...
class WordRepository constructor(application: Application) {
...
添加应用程序build.gradle
add app build.gradle
apply plugin: 'kotlin-kapt'
kapt "android.arch.lifecycle:extensions:$rootProject.archLifecycleVersion"
kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"
这篇关于无法创建类的实例-ViewModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文