Я начал переносить бизнес-логику из активити во 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;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть два фрагментаВо фрагменте 1 при нажатии кнопки открывается второй фрагмент
Вопрос вызван тем, что у меня есть CyclicBarrier, и мне из главного потока нужно узнать, когда CyclicBarrier открылсяДля CyclicBarrier я могу указать Runnable, который...
Подскажите, пожалуйста, каким(и) способом можно обработать готовое изображение что бы растянув/сжав придать ему форму разностороннего четырёхугольника...