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

Mensagem para Erro de Comunicação

Bom dia!

Segui os passos do vídeo e infelizmente não saiu a mensagem de erro quando não há conexão no Device.

Código abaixo:

    public async Task FazerLogin(Login login) {
            try {
                using (var cliente = new HttpClient()) {
                    var camposFormulario = new FormUrlEncodedContent(new[] {
                            new KeyValuePair<string, string>("email", login.Email),
                            new KeyValuePair<string, string>("senha", login.Senha)
                        });
                    cliente.BaseAddress = new Uri("https://aluracar.herokuapp.com/login");
                    var resultado = await cliente.PostAsync("/login", camposFormulario);

                    if (resultado.IsSuccessStatusCode) {
                        MessagingCenter.Send<Usuario>(new Models.Usuario(), "SucessoLogin");
                    }
                    else {
                        MessagingCenter.Send<LoginException>(new LoginException("Usuário ou Senha Incorretos!"), "FalhaLogin");
                    }
                }
            }
            catch {
                MessagingCenter.Send<LoginException>(new LoginException(@"Ocorreu um erro de comunicação com o Servidor!
Por favor, verifique a sua conexão e tente novamente mais tarde."), 
                "FalhaLogin");
                throw;
            }
        }
        public class LoginException : Exception {
            public  LoginException(string message) : base(message) { }
        }

Obs.: desativei a conexão de dados com o emulador, e os demais informativos de Mensageria funcionam normais. Apenas esse Bloco Cath que não funciona. Ao invés da mensagem, acaba por parar a execução no Visual Studio como se não houvesse tratamento.

Abs.

7 respostas

Olá, Adriano

Na janela output do Visual Studio aparece alguma mensagem de erro a mais? Pode colocar as mensagens que aparecem aqui, por favor?

Marcelo, boa noite!

Perdão a demora. Vamos lá.

Quando executo a Aplicação, eu desativo os Dados Móveis (conforme o vídeo) e tento logar. Ao invés do DisplayAlert, é aberta uma janela de erro no Visual Studio com o informativo abaixo:

Unhandled Exception:



System.Net.Http.HttpRequestException: An error occurred while sending the request

Abaixo dessa mensagem, um Link "Break and open Exception Settings", e dois botões "Break" e "Continue".

Abraços.

Boa tarde,

Alguma novidade sobre esse tópico!?

Abs.

solução!

Marcelo, boa noite.

Percebi que ao adicionar o Try... Catch no trecho...

 try {
                    resultado = await cliente.PostAsync("/login", camposFormulario);
                }
                catch {
                    MessagingCenter.Send<LoginException>(new LoginException(@"Ocorreu um erro de comunicação com o servidor. 
Por favor verifique a sua conexão e tente novamente mais tarde."), "FalhaLogin");
                }

... o emulador apresentava a mensagem de forma rápida na tela, contudo logo apontada no Visual Studio o erro, parando a execução. Adicionei no final da Mensagem do Catch um return, onde ele acaba forçando não executar mais nada abaixo (apesar de que não era certo!?).

Dessa forma funcionou.

Há algum comentário!?

Abs.

Oi Adriano

Tente declarar uma exceção no catch:

catch (Exception exc){

Em seguida, coloque um breakpoint na linha MessagingCenter.Send... e inspecione o valor de exc para ver a mensagem de erro.

Boa tarde,

Pode deixar! Farei assim que possível.

Ah e muito obrigado pelas aulas. Consegui entregar um excelente protótipo em meu trabalho com esses conteúdos.

Parabéns.

Eu que agradeço, Adriano. Muito obrigado por prestigiar nossos cursos!