Получить значение намерения Используя getIntent () в хранилище MVVM - PullRequest
0 голосов
/ 07 апреля 2020

Я даю первые шаги в MVVM , у меня есть приложение imbd, использующее модернизацию. На данный момент у меня есть динамический c URL, который изменяет список фильмов, передавая другой mov ie id

@GET("3/movie/{movie_id}}/similar?api_key="+api_key+"&language=en-US&page=1")
Call<Similar> getAllSimilarMovies(@Path("movie_id") int movieId);

У меня есть репозиторий, где я пытаюсь получить значения Intent, но .getIntent не работает, Intent находится в окне просмотра, передавая ID из mov ie, нажатых

public class DetailsMovieRepository {

    private List<ResultSimilar> similarMoviesList;

    private MutableLiveData<List<ResultSimilar>> mutableLiveData = new MutableLiveData<>();

    public MutableLiveData<List<ResultSimilar>> getSimilarMutableliveData() {


        MovieDataService movieDataService = RetrofitInstance.getRetrofitInstance();

        Intent intent = getIntent(); // DONT WORK!
         int movieId = intent.getIntExtra("movie_id",0);



        Call<Similar> call = movieDataService.getAllSimilarMovies(movieId);

        call.enqueue(new Callback<Similar>() {
            @Override
            public void onResponse(Call<Similar> call, Response<Similar> response) {
                Similar similar = response.body();

                if (similar != null && similar.getResults() != null) {

                    similarMoviesList = similar.getResults();

                    mutableLiveData.setValue(similarMoviesList);



                }
            }

            @Override
            public void onFailure(Call<Similar> call, Throwable t) {

                Log.e("onFailed", "  ******" + t.getMessage() + "*******");


            }
        });

        return mutableLiveData;

    }


}

Вопрос в том, как мне получить значение из Intent, сохранить как var и передать здесь

Call<Similar> call = movieDataService.getAllSimilarMovies(---MY INTENT VALUE---);

Стартовое намерение в адаптере

       private SimilarViewHolder(@NonNull View itemView) {
            super(itemView);

            movieNameTv = itemView.findViewById(R.id.name_movie_tv);
            movieRatingTv = itemView.findViewById(R.id.rating_movie_tv);
            moviePosterIV = itemView.findViewById(R.id.movie_poster_iv);
            movieDateTv = itemView.findViewById(R.id.date_movie_tv);
            movieVotesTv = itemView.findViewById(R.id.votes_movie_tv);
            movieOriginalTitleTv = itemView.findViewById(R.id.original_title_tv);
            movieLanguageTv = itemView.findViewById(R.id.language_movie_tv);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    int position = getAdapterPosition();

                    ResultSimilar selectedMovie = similarMoviesList.get(position);

                    Intent intent = new Intent(context, DetailsActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putInt("movie_id",selectedMovie.getId());
                    intent.putExtras(bundle);
                    context.startActivity(intent);

                    Log.e("ddddd" , "***" + selectedMovie.getId());


                }});
        }
    }

Служба данных

public interface MovieDataService {



    String api_key = "5bbf68dcf3b4ad3875ef7b2ed5ddfe1a";

    @GET("3/movie/now_playing?api_key="+api_key+"&language=en-US&page=1")
    Call<Movies> getAllMovies();

    @GET("3/movie/{movie_id}}?api_key="+api_key+"&language=en-US")
        Call<MovieResponse> getMovieDetails(@Path("movie_id") int movieId) ;

    @GET("3/movie/{movie_id}}/similar?api_key="+api_key+"&language=en-US&page=1")
    Call<Similar> getAllSimilarMovies(@Path("movie_id") int movieId);
}

Спасибо!

1 Ответ

0 голосов
/ 07 апреля 2020

Если вы хотите получить данные из Intent, тогда вы должны сделать это в своем классе Activity, затем вы можете передать их в хранилище из конструктора, например detailsMovieRepository(int id);

...