OkGo é uma biblioteca de rede para Android que encapsula o OkHttp, facilitando a realização de requisições HTTP com recrusos como cache e gerenciamento de callbacks. Este guia aborda a confiugração e o uso básico para requisições GET e POST.
Para integrar o OkGo em um projeto Android, adicione as dependências no arquivo build.gradle. O pacote principal é obrigatório, enquanto as bibliotecas auxiliares podem ser incluídas conforme necessário.
// Pacote principal obrigatório
implementation 'com.lzy.net:okgo:3.0.4'
// Bibliotecas opcionais para integração com RxJava e gerenciamento de tarefas
// implementation 'com.lzy.net:okrx:1.0.2' // Para RxJava 1
// implementation 'com.lzy.net:okrx2:2.0.2' // Para RxJava 2
// implementation 'com.lzy.net:okserver:2.0.5' // Para download e upload gerenciados
A requisição GET abaixo demonstra como buscar dados de uma API, com cnofigurações de tag para cancelamento e cache personalizado. Note o uso de um callback genérico e a manipulação da resposta na thread principal.
OkGo.<String>get("https://exemplo.com/api/recursos")
.tag("atividade_principal") // Tag para identificar e cancelar a requisição
.cacheKey("chave_recursos") // Chave única para armazenamento em cache
.cacheMode(CacheMode.IF_NONE_CACHE_REQUEST) // Modo de cache condicional
.headers("Accept", "application/json") // Cabeçalhos adicionais
.execute(new AbsCallback<String>() {
@Override
public void onSuccess(Response<String> resposta) {
String corpoResposta = resposta.body();
Log.d("RespostaGET", corpoResposta);
// Atualizar a interface com os dados obtidos
}
@Override
public void onError(Response<String> resposta) {
Throwable erro = resposta.getException();
Log.e("ErroGET", "Falha na requisição", erro);
}
});
Para requisições POST com parâmetros, é possível enviar dados no corpo ou como formulário. O exemplo a seguir envia parâmetros de formulário e processa a resposta para extrair um objeto JSON.
Map<String, String> parametros = new HashMap<>();
parametros.put("identificador", "12345");
parametros.put("tipo", "consulta");
OkGo.<String>post("https://exemplo.com/api/dados")
.tag("solicitacao_dados")
.params(parametros) // Parâmetros como formulário
.cacheKey("cache_dados_post")
.cacheMode(CacheMode.NO_CACHE) // Sem cache para dados dinâmicos
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> resposta) {
String jsonResposta = resposta.body();
try {
JSONObject objeto = new JSONObject(jsonResposta);
// Processar o objeto JSON, por exemplo:
String valor = objeto.getString("chave");
Log.d("RespostaPOST", "Valor: " + valor);
} catch (JSONException e) {
Log.e("ErroJSON", "Falha ao analisar resposta", e);
}
}
@Override
public void onError(Response<String> resposta) {
super.onError(resposta);
Log.e("ErroPOST", "Requisição falhou");
}
});