Bom dia,
Estou dando seguimento no curso Android Acessando API, estou na aula 4 > subtópico > 03 Utilizando callbacks do Retrofit. Depois que fiz as alterações conforme o video, quando vou fazer a inclusão de algum produto tanto interno como na API, ele não salva e da erro. Gostaria de um suporto pois assisti o video 3 vezes e está idêntico o código. Mas é estranho dar esse erro, sendo que está tudo conectado normalmente. Segue o código abaixo:
public class ProdutoRepository {
private final ProdutoDAO dao;
private final ProdutoService service;
public ProdutoRepository(ProdutoDAO dao) {
this.dao = dao;
service = new EstoqueRetrofit().getProdutoService();
}
public void buscaProdutos(DadosCarregadosListener<List<Produto>> listener) {
buscaProdutosInternos(listener);
}
private void buscaProdutosInternos(DadosCarregadosListener<List<Produto>> listener) {
new BaseAsyncTask<>(dao::buscaTodos,
resultado -> {
listener.quandoCarregados(resultado);
buscaProdutosNaApi(listener);
}).execute();
}
private void buscaProdutosNaApi(DadosCarregadosListener <List<Produto>> listener) {
Call<List<Produto>> call = service.buscaTodos();
new BaseAsyncTask<>(() -> {
try {
Response<List<Produto>> resposta = call.execute();
List<Produto> produtosNovos = resposta.body();
dao.salva(produtosNovos);
} catch (IOException e) {
e.printStackTrace();
}
return dao.buscaTodos();
}, listener::quandoCarregados)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
public void salva(Produto produto, DadosCarregadosCallback<Produto> callback) {
salvaNaApi(produto, callback);
}
private void salvaNaApi(Produto produto,DadosCarregadosCallback<Produto> callback) {
Call<Produto> call = service.salva(produto);
call.enqueue(new Callback<Produto>() {
@Override
@EverythingIsNonNull
public void onResponse(Call<Produto> call, Response<Produto> response) {
if(response.isSuccessful()){
Produto produtoSalvo = response.body();
if(produtoSalvo != null){
salvaInterno(produtoSalvo, callback);
}
}else{
callback.quandoFalha("Resposta não sucedida");
}
}
@Override
@EverythingIsNonNull
public void onFailure(Call<Produto> call, Throwable t) {
callback.quandoFalha("Falha de Comunicação: " + t.getMessage());
}
});
}
private void salvaInterno(Produto produto, @NonNull DadosCarregadosCallback<Produto> callback) {
new BaseAsyncTask<>(() -> {
long id = dao.salva(produto);
return dao.buscaProduto(id);
}, callback::quandoSucesso)
.execute();
}
public interface DadosCarregadosListener<T> {
void quandoCarregados(T resultado);
}
public interface DadosCarregadosCallback<T>{
void quandoSucesso(T resultado);
void quandoFalha(String erro);
}
}
Segue o log abaixo: 2022-08-18 10:58:08.759 22918-22958/br.com.alura.estoque I/okhttp.OkHttpClient: --> POST http://192.168.15.84:8080/Produto 2022-08-18 10:58:08.762 22918-22958/br.com.alura.estoque I/okhttp.OkHttpClient: Content-Type: application/json; charset=UTF-8 2022-08-18 10:58:08.762 22918-22958/br.com.alura.estoque I/okhttp.OkHttpClient: Content-Length: 54 2022-08-18 10:58:08.766 22918-22944/br.com.alura.estoque D/OpenGLRenderer: endAllActiveAnimators on 0x7c84a8b85fb0 (RippleDrawable) with handle 0x7c83b8b82910 2022-08-18 10:58:08.780 22918-22958/br.com.alura.estoque I/okhttp.OkHttpClient: {"id":0,"nome":"celular","preco":2000,"quantidade":10} 2022-08-18 10:58:08.797 22918-22958/br.com.alura.estoque I/okhttp.OkHttpClient: --> END POST (54-byte body) 2022-08-18 10:58:08.841 22918-22958/br.com.alura.estoque I/okhttp.OkHttpClient: <-- HTTP FAILED: java.net.ConnectException: Failed to connect to /192.168.15.84:8080 2022-08-18 10:58:08.851 22918-22944/br.com.alura.estoque D/EGL_emulation: app_time_stats: avg=5698.69ms min=5698.69ms max=5698.69ms count=1 2022-08-18 10:58:08.853 22918-22918/br.com.alura.estoque D/CompatibilityChangeReporter: Compat change id reported: 147798919; UID 10148; state: ENABLED