【发布时间】:2018-06-21 12:50:35
【问题描述】:
我正在关注 google 的示例,该示例在 java 中,但是当我在 kotlin 中重写它时,我无法实例化该类。 我正在学习视图模型。我很怀疑我是否弄乱了我的 kotlin 代码的语法。
https://github.com/googlecodelabs/android-room-with-a-view
类 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!!
}
【问题讨论】:
-
你能提供完整的堆栈跟踪吗?
-
进程:com.example.felippe.livedata,PID:11852 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.felippe.livedata/com.example.felippe. livedata.MainActivity}: kotlin.KotlinNullPointerException @ElectroWeak
-
这只是堆栈跟踪的开始。复制整个文本。
标签: android kotlin viewmodel android-architecture-components