Android - невозможно вызвать методы, определенные в ViewModel - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь вызвать метод, который я создал в своем классе 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'

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

private ViewModel mViewModel;

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

private MovieViewModel viewModel;

0 голосов
/ 28 августа 2018

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

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

0 голосов
/ 28 августа 2018

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

...