Android - невозможно вызвать методы, определенные в ViewModel

Я пытаюсь вызвать метод, который я создал в своем классе ViewModel, но я не могу получить к нему доступ в моей MainActivity, где я инициализировал свою ViewModel.

Это мой класс ViewModel

public class MovieViewModel extends AndroidViewModel {

private MovieRepository movieRepository;
public List<Movie> movieList;

public MovieViewModel(@NonNull Application application) {
    super(application);
    movieRepository = new MovieRepository();
}

public List<Movie> getMovieList(String sortChoice, int pageNumber) {
    movieList = movieRepository.getMovieList(sortChoice,pageNumber);
    return movieList;
}
}

Это часть MainActivity

    private ViewModel mViewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        pageNumber = 1;
        sharedPref = this.getPreferences(Context.MODE_PRIVATE);
        String defaultSort = MovieConstants.POPULAR;
        choiceOfSorting = sharedPref.getString(PREF_SORT_KEY, defaultSort);

        mViewModel = ViewModelProviders.of(this).get(MovieViewModel.class);
`

Когда я пытаюсь вызвать метод getMovieList со строкой

mViewModel.getMovieList(someVariable, someVariable); 

он отображается красным цветом: "Невозможно разрешить символ" getMovieList "

вы сохраняете модель просмотра в экземпляре ViewModel, вместо этого используйте MovieViewModel

Qasim 28.08.2018 15:57
2
1
192
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ваш mViewModel относится к типу ViewModel, у которого нет метода getMovieList. Измените тип на MovieViewModel.

Ответ принят как подходящий

private ViewModel mViewModel;

ViewModel не имеет getMovieList, поэтому измените его на

private MovieViewModel viewModel;

Вы назначаете ViewModelProviders.of(this).get(MovieViewModel.class); переменной базового типа ViewModel, поэтому вы сможете получить доступ только к методам, доступным в ViewModel.

Заменить private ViewModel mViewModel; на private MovieViewModel mViewModel;

Другие вопросы по теме