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

Problemas na inclusão de produtos na API e Interno!!!

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

2 respostas

Fala Alan, de boa ?

Cara, uma dúvida os ips batem ? Porque pode ser que tenha mudado por algum motivo e isso tá zoando, tanto que ele recusou a conexão, pelo erro.

O servidor tava de pé ? Apresentou algum erro ?

solução!

Matheus,

Obrigado pela sugestão acabei encontrando o erro, simplesmente o produto tava com letra maiuscula, por isso tava dando erro.

public interface ProdutoService {

@GET("produto")
Call<List<Produto>> buscaTodos();

@POST("Produto") // Correto - "produto"
Call<Produto> salva(@Body Produto produto);

}