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

Erro de conexão

Tenho recebido uma mensagem de erro de conexão com o servidor "http://192.168.174.1:8080/api/", seria esse ip mesmo ?

Mensagem de erro:

2019-03-12 21:35:33.972 8072-8072/br.com.alura.agenda E/token falhou: connect timed out
6 respostas

Oi Pabro, tudo bem?

O pelo o que erro indica, você não está acessando o endereço certo.

Sobre sua dúvida se esse é o endereço correto, você precisa verificar o endereço IP do seu computador por meio dos programas disponíveis pelos sistemas operacionais:

  • Windows: ipconfig
  • Linux e Mac: ifconfig

Assim que obter o ip faça o teste pegando e a porta e tentando acessar via navegador. Caso funcione, teste o mesmo endereço no navegador do celular.

Se não funcionar, talvez o dispositivo e o computador não estão na mesma rede, aí vai precisar configurá-los para que fiquem na mesma rede.

[]s

Grande professor Alex, primeiramente muito obrigado por me responder.

Então eu achei que esse ip que eu comentei no tópico era referente algum serviço externo, mas na realidade esse endpoint é disponibilizado no server correto ?

Bom eu inicializo o server e até tento fazer uma chamada na URI "192.168.0.xxx/api" porem estou recebendo o seguinte erro:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Mar 14 21:12:36 BRT 2019
There was an unexpected error (type=Not Found, status=404).
No message available

A minha duvida é onde realmente esse serviço está disponível.

Um abraço...

Obrigado pelo elogio, estamos aqui para ajudá-lo no que precisar o/

Sim, o endereço IP é do computador que executou o servidor, por isso precisa modificá-lo.

Sobre o erro é pelo fato de que o end point que está acessando (192.168.0.xxx/api) não foi mapeado pelo servidor, tente por exemplo a variação 192.168.0.x:y/api/aluno que devolve a lista de alunos.

[]s

Professor Alex, muito obrigado por ter me respondido e desculpe a demora por voltar aqui, sabe como é essa vida de DEV esta tudo sempre atrasado e fora do prazo kkkkkk.

Parabéns pelo conteúdo que você trabalha na Alura, eu fiz a formação Android na Caelum foi uma pena não ter tido aula com você, mas o seu conteúdo aqui esta nota mil, quem sabe um dia eu tenha a oportunidade de trabalhar com um profissional do seu nível, ficaria muito feliz.

Bom fiz o teste na seguinte uri "http://192.168.80.1:8080/api/aluno" no brownser eu tenho o retorno das listas com sucesso no formato de json, mas no app eu estou recebendo a seguinte exception:

03-19 00:08:39.146 15863-15863/br.com.alura.agenda E/AndroidRuntime: FATAL EXCEPTION: main
    Process: br.com.alura.agenda, PID: 15863
    java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.alura.agenda/br.com.alura.agenda.ListaAlunosActivity}: java.lang.IllegalArgumentException: baseUrl must end in /: http://192.168.80.1:8080/api/aluno
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     Caused by: java.lang.IllegalArgumentException: baseUrl must end in /: http://192.168.80.1:8080/api/aluno
        at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:515)
        at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:458)
        at br.com.alura.agenda.retrofit.RetrofitInicializador.<init>(RetrofitInicializador.java:24)
        at br.com.alura.agenda.ListaAlunosActivity.buscaAlunos(ListaAlunosActivity.java:118)
        at br.com.alura.agenda.ListaAlunosActivity.onCreate(ListaAlunosActivity.java:85)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Essa é minha classe inicializadora do retrofit:

public class RetrofitInicializador {

    private final Retrofit retrofit;

    public RetrofitInicializador(){

        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient.Builder client = new OkHttpClient.Builder();

        client.addInterceptor(interceptor);

        this.retrofit = new Retrofit.Builder().baseUrl("http://192.168.80.1:8080/api/aluno")
                .addConverterFactory(JacksonConverterFactory
                        .create())
                .client(client.build())
                .build();
    }


    public AlunoService getAlunoService() {

        return retrofit.create(AlunoService.class);
    }

    public DispositivoService getDispositivoService() {
        return retrofit.create(DispositivoService.class);

    }
}

Estou achando muito estranho o fato de conseguir chamar o endpoint no brownser mas não consigo usar no meu app....

Você teria outra dica ?

Abs ....

solução!

Opa Pable, sem problemas! Tudo no seu tempo hehe

Fico muito feliz pelas suas palavras, muito obrigado mesmo :)

Esse erro é tranquilo a descrição é essa:

Caused by: java.lang.IllegalArgumentException: baseUrl must end in /: http://192.168.80.1:8080/api/aluno

Ou seja, falta uma / no final da URI, basta apenas deixar a URL base da seguinte maneira:

this.retrofit = new Retrofit.Builder().baseUrl("http://192.168.80.1:8080/api/aluno/")

Um detalhe importante é que a recomendação para URL é configurar um endereço que sirva para outros end points da API, como é o caso do /aluno ou /algumaOutraCoisa, portanto, ao invés de http://192.168.80.1:8080/api/aluno/ deixe apenas http://192.168.80.1:8080/api/, então você faz a modificação do restante no service do Retrofit quando configurar a requisição.

[]s

Fala Professor Alex, muito obrigado realmente era algo bem simples.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software