Bom pessoal, eu consumo a api do the movie db para exibir uma lista de filmes para o usuário, porem no meu app, eu deixo a opção para que o usuário possa favoritar esse filme, quando ele favorita, eu salvo o id em um banco de dados sqlite. Quando quero exibir apenas os filmes favoritados, eu pego a lista dos ids, e faço a busca na api novamente para puxar o restante das informações dos filmes usando retrofit conforme o código a seguir:
private void loadFavoriteMovies() {
if (!movies.isEmpty()){
movies = new ArrayList<>();
}
showProgressBar();
FavoriteMovieDbHelper dbHelper = new FavoriteMovieDbHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
List<Movie> favoriteMoviesList = dbHelper.allMoviesList();
for (Movie m : favoriteMoviesList) {
Call<Movie> call = new RetrofitStarter().getMovieService().getFavoriteMovieDetail(m.getId(), getString(R.string.the_movie_db_api_key));
call.enqueue(new Callback<Movie>() {
@Override
public void onResponse(Call<Movie> call, Response<Movie> response) {
movies.add(response.body());
hideProgressBar();
initAdapter(movies);
}
@Override
public void onFailure(Call<Movie> call, Throwable t) {
Log.e("ERROR", "error loading top rated movies: " + t.getMessage());
}
});
}
}
Minhas questões são as seguintes: 1 - essa é a maneira mais correta de fazer isso? 2 - Pq só consigo inicializar o adapter dentro do metodo onresponse, e não após o foreach?