Работа с ViewModel или перенос Бизнес-логики из активити

178
29 марта 2022, 20:30

Я начал переносить бизнес-логику из активити во viewModel, но остановился на одном месте. Мне нужно перенести этот участок:

repo.getMovieWithId(secondSorting)
            .enqueue(new Callback<Movie>() {
                @Override
                public void onResponse(Call<Movie> call, Response<Movie> response) {
                    List<MovieItem> movieItems = getMovieItemsFromResponse(response);
                    secondMovieAdapter.submitList(movieItems);
                }
                @Override
                public void onFailure(Call<Movie> call, Throwable t) {
                }
            });
    repo.getMovieWithId(thirdSorting)
            .enqueue(new Callback<Movie>() {
                @Override
                public void onResponse(Call<Movie> call, Response<Movie> response) {
                    List<MovieItem> movieItems = getMovieItemsFromResponse(response);
                    thirdMovieAdapter.submitList(movieItems);
                }
                @Override
                public void onFailure(Call<Movie> call, Throwable t) {
                }
            });
    private List<MovieItem> getMovieItemsFromResponse(Response<Movie> response) {
    Movie movie = response.body();
    List<MovieItem> movieItems = new ArrayList<MovieItem>();
    for (int i = 0; i < movie.getResults().size(); i++) {
        Result result = movie.getResults().get(i);
        movieItems.add(new MovieItem(result.getTitle(),
                result.getReleaseDate(),
                result.getPosterPath(),
                result.getVoteAverage(),
                result.getId()));
    }
    return movieItems;
}

https://github.com/ploskiycherv/MovieApi

Но я не могу понять, как сделать так, что бы не создавать для каждого ресайкла новые переменные и методы во viewModel, а сделать это более автономно и компактней, без дублирования кода. Во MovieModel уже есть часть перенесенного кода, который ничем не отличается от тех, что нужно перенести:

public class MovieModel extends ViewModel {

private MovieRepo repo = new MovieRepoImpl();
private MutableLiveData<List<MovieItem>> movieItemLiveData = new MutableLiveData<>();
public LiveData<List<MovieItem>> movieItemLiveData() {
    return movieItemLiveData;
}
public void getMovies(String sorting) {
    repo.getMovieWithId(sorting)
            .enqueue(new Callback<Movie>() {
                @Override
                public void onResponse(Call<Movie> call, Response<Movie> response) {
                    List<MovieItem> movieItems = getMovieItemsFromResponse(response);
                    movieItemLiveData.setValue(movieItems);
                }
                @Override
                public void onFailure(Call<Movie> call, Throwable t) {
                }
            });
}
private List<MovieItem> getMovieItemsFromResponse(Response<Movie> response) {
    Movie movie = response.body();
    List<MovieItem> movieItems = new ArrayList<MovieItem>();
    for (int i = 0; i < movie.getResults().size(); i++) {
        Result result = movie.getResults().get(i);
        movieItems.add(new MovieItem(result.getTitle(),
                result.getReleaseDate(),
                result.getPosterPath(),
                result.getVoteAverage(),
                result.getId()));
    }
    return movieItems;
}

}

READ ALSO
Добавление кнопки &quot;Назад&quot; в Action Bar. Android

Добавление кнопки "Назад" в Action Bar. Android

Есть два фрагментаВо фрагменте 1 при нажатии кнопки открывается второй фрагмент

81
Как стороннему потоку сказать главному, что он завершился?

Как стороннему потоку сказать главному, что он завершился?

Вопрос вызван тем, что у меня есть CyclicBarrier, и мне из главного потока нужно узнать, когда CyclicBarrier открылсяДля CyclicBarrier я могу указать Runnable, который...

100
Растяжение изображения

Растяжение изображения

Подскажите, пожалуйста, каким(и) способом можно обработать готовое изображение что бы растянув/сжав придать ему форму разностороннего четырёхугольника...

83
Android поиск в AppBar

Android поиск в AppBar

Я начинающий программистУ меня возникла небольшая проблема

211