🚀 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
enqueuedo 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 oProgressBar) 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.