Вызов супер бросков "супер не выражение" - PullRequest
0 голосов
/ 08 ноября 2018

Я начал изучать реализацию MVVM из Руководства Google здесь: https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#8 (размещена ссылка, особенно на интересующую меня страницу).
Поскольку я понял, как реализовать его на Java, я решил перейти на Kotlin. При инициализации конструктора в расширении класса AndroidViewModel мне нужно вызвать super, и он выдает следующую ошибку:

"super" не является выражением, его можно использовать только в левой части точки ('.') "

Пока я гуглил и нашел похожую тему , но я ее совсем не понял, поэтому не решил свою проблему. Это мой код для 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);
    }
}

1 Ответ

0 голосов
/ 08 ноября 2018

Вы уже звоните супер здесь: NotesViewModel private constructor(application: Application) : AndroidViewModel(application)

Другая проблема в том, что ваш конструктор private

Просто сделайте это public и удалите super вызов из init()

...