Dom*_*min 0 java android mvvm kotlin android-livedata
我从这里开始学习从Google指南实施MVVM:https:
//codelabs.developers.google.com/codelabs/android-room-with-a-view/#8 (特别是对我感兴趣的页面发布链接) .
由于我理解在Java中实现它,我决定切换到Kotlin.在类扩展中初始化构造函数时,AndroidViewModel我需要调用super它,它会抛出以下错误:
"super"不是表达,它只能用在点的左侧('.')"
当我用Google搜索并发现类似的主题但我根本不理解它,所以我没有解决我的问题.这是我的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)
}
}
Run Code Online (Sandbox Code Playgroud)
那么,我该如何正确调用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);
}
}
Run Code Online (Sandbox Code Playgroud)
你已经在这里打电子了: NotesViewModel private constructor(application: Application) : AndroidViewModel(application)
另一个问题是你的构造函数是 private
只需制作public并删除super来电即可init()