Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Qual a maneira correta de inicializar um adapter com retrofit2

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?

4 respostas
solução!

Fala ai Jilles, de boa ?

Acho que seu código está bem acoplado.

A requisição você podia deixar numa classe separada, o resultado que é o importante você poderia usar o pattern delegate para passar para frente o resultado.

Existem bibliotecas que podem te ajudar a implementar essa parte, uma bem legal se chama Eventbus, que você pode dar uma olhadinha aqui

O que precisar pode dar um toque

hunnnn acho q olhamos o padrao delegate no curso da caelum kkkkk bem lembrado. Vou dar uma olhada nisso. Valew

http://blog.alura.com.br/utilizando-o-padrao-delegate-em-android/

:D orra, valew mano