我从这里学习了如何从Google指南中学习如何实现MVVM:
https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#8(特别是指向我感兴趣的页面的链接)。
因为我了解用Java实现它,所以我决定改用Kotlin。
在扩展AndroidViewModel
的类中初始化构造函数时,我需要调用super
,这会引发以下错误:
“ super”不是表达式,只能在左侧使用 点('。')“
我在Google上搜索并发现类似的topic,但我完全不了解它,因此无法解决问题。
这是我对ViewModel
类的代码:
class NotesViewModel private constructor(application: Application) : AndroidViewModel(application){
var mRepository: NotesRepository? = null
var mAllNotes: LiveData<List<Notes>>? = null
init {
super(application) // <-- here it throws me an error
mRepository = NotesRepository(application)
mAllNotes = mRepository!!.getAllWords()
}
fun getAllNotes(): LiveData<List<Notes>>{
return mAllNotes!!
}
fun insert(notes: Notes){
mRepository!!.insert(notes)
}
}
那么,我应该如何正确地调用super,构造一个构造函数? 这是此类的正确Java代码:
public class WordViewModel extends AndroidViewModel {
private WordRepository mRepository;
private LiveData<List<Word>> mAllWords;
public WordViewModel(Application application) {
super(application);
mRepository = new WordRepository(application);
mAllWords = mRepository.getAllWords();
}
LiveData<List<Word>> getAllWords() {
return mAllWords;
}
void insert(Word word) {
mRepository.insert(word);
}
}
答案 0 :(得分:6)
您已经在这里叫超级:NotesViewModel private constructor(application: Application) : AndroidViewModel(application)
另一个问题是您的构造函数为private
只需使其成为public
并从super
删除init()
通话