Как передать данные из активности или фрагмента в модель представления?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как передать данные из активности или фрагмента в модель представления?

Сообщение Anonymous »

Я создаю проект, в котором использую API-интерфейс themoviedb для получения данных. Для этого я использую архитектуру MVVM. Из MovieListFragment я хочу передать такую ​​категорию, как Popular, top_rated, в MovieViewModel для соответствующей фильтрации фильмов, но там я получаю нулевое значение.

Вот класс MovieListFragment: -

public class MovieListFragment extends Fragment {

private MovieViewModel movieViewModel;
private static final String BASE_URL = "https://api.themoviedb.org";
private static final String API_KEY = "API_KEY";
private String category;

private GridView gridView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_movie_list, container, false);
gridView = rootView.findViewById(R.id.images_grid_view);

movieViewModel = ViewModelProviders.of(this).get(MovieViewModel.class);
movieViewModel.setCategory(category); // from here i am passing value
movieViewModel.getMoviesRepository().observe(getActivity(), new Observer() { // error line no :- 76
@Override
public void onChanged(MovieResults movieResults) {
final List listOfMovies = movieResults.getResults(); // error line no :- 79

MovieListAdapter mAdapter = new MovieListAdapter(getContext(), listOfMovies);
gridView.setAdapter(mAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
mCallback.onImageSelected(position, listOfMovies);
}
});
}
});
return rootView;
}

public void setCategory(String category) {
this.category = category;
}
}


Вот класс MovieViewModel: -

public class MovieViewModel extends AndroidViewModel {
private String category;
private static final String API_KEY = "api_key";
private MovieRepository repository;
private MutableLiveData listOfMovies;

public MovieViewModel(@NonNull Application application) {
super(application);
Log.d("MovieViewModel", category); // but here i am getting null value
listOfMovies = repository.getListOfMovies(category, API_KEY);
}

public MutableLiveData getMoviesRepository() {
return listOfMovies;
}

public void setCategory(String category) {
this.category = category;
}
}


Я получаю такую ​​ошибку: -

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.mountblue.moviesapp.entity.MovieResults.getResults()' on a null object reference
at com.mountblue.moviesapp.fragment.MovieListFragment$2.onChanged(MovieListFragment.java:79)
at com.mountblue.moviesapp.fragment.MovieListFragment$2.onChanged(MovieListFragment.java:76)


Подробнее здесь: https://stackoverflow.com/questions/609 ... -viewmodel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»