Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro ao enviar dados do aluno

boa tarde!

Estou na aula 3 , onde os dados do aluno são enviados pela primeira vez para o webservice. Porém ele não está aceitando e dá o seguinte erro:

07-25 16:48:34.600 12553-20998/br.com.alura.agenda W/System.err: java.io.FileNotFoundException: http://192.168.99.1:8080/api/aluno
07-25 16:48:34.601 12553-20998/br.com.alura.agenda W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:250)
        at br.com.alura.agenda.web.WebClient.realizaConexao(WebClient.java:43)
        at br.com.alura.agenda.web.WebClient.insere(WebClient.java:25)
        at br.com.alura.agenda.tasks.InsereAlunoTask.doInBackground(InsereAlunoTask.java:20)
        at android.os.AsyncTask$2.call(AsyncTask.java:305)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)

Alguém sabe o motivo disso estar ocorrendo?

Obrigado, Victor Augusto.

5 respostas

Oi Victor, tudo bem?

Você pode mandar o código do client para verificar se tem algum detalhe nele?

Apenas para adiantar, tenta acessar o endereço http://192.168.99.1:8080 via dispositivo que está tentando fazer o envio, se aparecer o servidor, já sabemos que o problema não está na conexão entre a App e o servidor.

[]s

Sim, consigo acessar o localhost via esse ip.

Segue o código do client

public class WebClient {


    public String post(String json) {
        String endereco = "https://www.caelum.com.br/mobile";
        return realizaConexao(json, endereco);
    }

    public void insere(String json) {
        String endereco = "http://192.168.56.1:8080/api/aluno";
        realizaConexao(json, endereco);
    }

    @Nullable
    private String realizaConexao(String json, String endereco) {
        try {
            URL url = new URL(endereco);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("Content-type", "application/json");
            connection.setRequestProperty("Accept", "application/json");

            connection.setDoOutput(true);

            PrintStream output = new PrintStream(connection.getOutputStream());
            output.println(json);

            connection.connect();

            Scanner scanner = new Scanner(connection.getInputStream());
            String resposta = scanner.next();
            return resposta;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


}

Obrigado

Olhando apenas o código, não consegui identificar um problema... Consegue me enviar o projeto via GitHub para eu dar uma olhada?

[]s

Acredito que talvez o problema não esteja no código.

Peguei seu projeto final e cada e está dando conexão falha, mesmo pelo retrofit. Mas já chequei varias vezes, o server está ligado com o ip inves de "localhost" e é exatamento o mesmo ip que coloquei na classe retrofit.

Sabe o que poderia ser?

D/OkHttp: {"caminhoFoto":null,"endereco":"ggggggggg","id":"6d24e2e8-9e26-45e2-88d7-e90321e16b70","nome":"sffsffff444","nota":7.0,"site":"435345ggg","telefone":"2222222"}
          --> END POST (159-byte body)
D/OkHttp: <-- HTTP FAILED: java.net.ConnectException: Failed to connect to /192.168.56.1:8080
E/onFailure: requisicao falhou
D/OkHttp: --> GET http://192.168.56.1:8080/api/aluno http/1.1
          --> END GET
D/OkHttp: <-- HTTP FAILED: java.net.ConnectException: Failed to connect to /192.168.56.1:8080
I/id do aluno: 6d24e2e8-9e26-45e2-88d7-e90321e16b70
E/onFailure chamado: Failed to connect to /192.168.56.1:8080
W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
                           finishComposingText on inactive InputConnection
D/OpenGLRenderer: endAllActiveAnimators on 0x8eed5380 (RippleDrawable) with handle 0x8fef9320
solução

Que estranho, confesso que não sei o que poderia ser :/

Uma alternativa para tentar usar a API é utilizando o ngrok. Com ele é possível mapear o seu localhost para um endereço público, dessa maneira, não é necessário o dispositivo estar na mesma rede do servidor.

[]s