🚀 5.3 Consumindo o Web Service com Retrofit

Para realizar requisições HTTP e processar respostas JSON, o padrão moderno da indústria é o Retrofit. Ele transforma sua API REST em uma interface Java, eliminando códigos repetitivos de conexão e parsing manual.

Configurando a Interface da API

Em vez de montar URLs manualmente, definimos uma interface que descreve o serviço:

public interface TwitterService {
    @GET("search.json")
    Call<TwitterResponse> buscarTweets(@Query("q") String query);
}

O Modelo de Dados (POJO)

Utilizamos classes simples que o GSON usará para mapear o JSON automaticamente:

public class TwitterResponse {
    public List<Tweet> results;
}
 
public class Tweet {
    @SerializedName("from_user")
    public String usuario;
    
    @SerializedName("text")
    public String texto;
}

Implementação na Activity (Retrofit + ViewBinding)

Na TwitterSearchActivity, inicializamos o Retrofit e executamos a busca de forma assíncrona usando o método enqueue:

public class TwitterSearchActivity extends AppCompatActivity {
 
    private ActivityTwitterSearchBinding binding;
    private TwitterService service;
 
    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityTwitterSearchBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
 
        var retrofit = new Retrofit.Builder()
                .baseUrl("https://api.twitter.com/1.1/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
 
        service = retrofit.create(TwitterService.class);
    }
 
    public void buscar(View v) {
        var query = binding.editTexto.getText().toString();
        binding.progressBar.setVisibility(View.VISIBLE);
 
        service.buscarTweets(query).enqueue(new Callback<TwitterResponse>() {
            @Override
public void onResponse(Call<TwitterResponse> call, Response<TwitterResponse> response) {
                binding.progressBar.setVisibility(View.GONE);
                if (response.isSuccessful() && response.body() != null) {
                    atualizarLista(response.body().results);
                }
            }
 
            @Override
public void onFailure(Call<TwitterResponse> call, Throwable t) {
                binding.progressBar.setVisibility(View.GONE);
                Toast.makeText(TwitterSearchActivity.this, "Erro na rede", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

IMPORTANT

Adeus AsyncTask: O método enqueue do Retrofit executa automaticamente a requisição em uma thread de background e entrega o resultado na Thread Principal, permitindo que você atualize a UI (como o ProgressBar) de forma segura e direta.

TIP

Dica de Engenharia: Sempre verifique response.isSuccessful() antes de acessar o corpo da resposta, para tratar erros como 404 (Não Encontrado) ou 500 (Erro no Servidor) de forma elegante.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️