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

Erro ao apertar botão "Próximo": System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. mscorlib

Ao apertar o botão próximo está ocorrendo essa exceção.

Internal Exception aponta "NullException"

Ocorre em "this.Veiculo = veiculo;" no AgendamentoViewModel (veiculo não estava nulo, verifiquei)

Já gastei muito tempo tentando solucionar, já estou neste problema a alguns dias e não consigo prosseguir no curso.

Link do projeto completo: https://drive.google.com/file/d/1YMoVv4J0qFMlvbSyfslww-5xaOmWciNV/view?usp=sharing

8 respostas

Olá Raphael, tudo certo?

Esse problema foi bem difícil de encontrar, mas vamos ao problema:

O construtor do seu AgendamentoViewModel está da seguinte forma:

public AgendamentoViewModel(Veiculo veiculo)
        {
            this.Veiculo = veiculo;
            this.Agendamento = new Agendamento
            {
                Veiculo = veiculo
            };
           // Código do AgendarCommand
        }

E a parte da instanciação do Agendamento é que está dando o erro. Alterei as primeiras linhas para ficarem exatamente como nos vídeos do Marcelo, assim:

this.Agendamento = new Agendamento();
this.Agendamento.Veiculo = veiculo;

Por algum motivo, esse código tem problemas de Reflection, que sinceramente, ainda não estudei muito sobre o assunto, então não tenho muita propriedade para falar sobre (mais informações neste curso e neste curso).

Bom, depois me diz aí se deu certo para você.

No aguardo!

Boa noite Fabiano, muito obrigado pela sua resposta

Eu já havia feito essa alteração e não resolveu, ja copiei o código do professor, CTRL + C e CTRL + V e não deu certo mesmo assim, eu vi que a versão do Xamarin na aula é algo entre 2.x e a atual é 4.x, eu imagino que seja algo relacionado a isso e que fazer um downgrade resolveria, mas essa ideia não me agrada muito.

Segue abaixo uma cópia de como se encontra esse trecho do código atualmente, eu alterei a variavel "Veiculo" para "VeiculoAgendado " pra não ficar confuso na hora.

public Agendamento Agendamento{ get; set; }
        public Veiculo Veiculo { get { return Agendamento.VeiculoAgendado; } set { Agendamento.VeiculoAgendado = value;  } }
        public string Nome { get { return Agendamento.Nome; } set { Agendamento.Nome = value; } }
        public string Celular { get { return Agendamento.Celular; } set { Agendamento.Celular = value; } }
        public string Email { get { return Agendamento.Email; } set { Agendamento.Email = value; } }
        public DateTime DataAgendamento { get { return Agendamento.DataAgendamento; } set { Agendamento.DataAgendamento = value; } }
        public TimeSpan HoraAgendamento { get { return Agendamento.HoraAgendamento; } set { Agendamento.HoraAgendamento = value; } }

        public AgendamentoViewModel(Veiculo veiculo)
        {
            this.Agendamento = new Agendamento();
            this.Agendamento.VeiculoAgendado = veiculo;                       

            AgendarCommand = new Command(() =>
            {
                if (this.Agendamento != null)
                    MessagingCenter.Send(this.Agendamento, "Agendamento");
            });

        }

Isso é muito estranho, porque apliquei no seu próprio projeto e funcionou.

Já tentou pegar o download do seu projeto e "começar" a partir dele, fazendo essa alteração? Pode ser que algum bug do além tenha caído sobre o esse projeto.

Outra coisa, qual versão do emulador está usando. O teste que fiz foi usando o Pixel 2 Nougat 7.1 - API 25.

Quem sabe essas pequenas dicas bobas não ajude de alguma forma?

Boa noite Fabiano, novamentoe agradeço pela ajuda, mas ainda não funcionou, infelizmente...

Eu estava usando o computador do trabalho, agora estou em meu próprio computador, baixei o projeto e deu o mesmo erro nos dois casos, seja com o código antigo ou o código que me recomendou que é parecido com o da aula.

Eu não uso emulador, uso meu próprio aparelho, Moto Z3 Play (Android 9.0 - API 28), não é do meu interesse trocar de versão pois isso não resolveria o problema, só contornaria ele. E também iria atrapalhar muito meu ambiente de desenvolvimento visto que o emulador é muito lento.

Continuo a procura de outra solução.

Se nada der certo irei usar o metodo antigo de troca de páginas e desconfio de que isso irá me atrapalhar bastante pois o professor deve usar essa forma mais vezes.

Bom dia novamente Fabiano, eu testei e funcionou no Pixel 2 Nougat 7.0 API 24, porém não é o ideal já que é uma versão antiga, existe uma nova forma de fazer o que o professor está passando nessa aula?

Então Raphael, é estranho porque, ao criar o emulador, são escolhidas as opções da versão mínima e a versão alvo que o aplicativo irá rodar. Então, ao escolher essas opções é para rodar em todas as versões entre (e inclusive) a versão mínima e a versão alvo, e testar se funciona normalmente.

Acredito que o ideal seria ter emuladores de várias versões do Android e aparelhos, para ter certeza que não terá problemas. Mas também sei que isso é muito difícil para o desenvolvedor individual.

De acordo com as propriedades do seu projeto, deveria ser compatível com qualquer versão do Android entre a 5.0 (API 21) e 9.0 (API 28):

Quanto a outra forma de fazer as trocas de páginas, essa é a estrutura do MVVM.

Fiz o teste usando o meu celular (Galaxy J7 Android 9.0), peguei o projeto do fim deste curso e ele deu um erro sobre suporte a armeabi. Cliquei com o direito no projeto Droid e fui em propriedades. Na aba Opções do Android, selecionei Avançado lá embaixo e em Arquiteturas com suporte selecionei todas e compilei. Depois disso foi normalmente.

Pode ser que a execução diretamente no celular deve ativar alguns problemas de configurações, como esse.

Bom dia Fabiano, testei novamente em casa após sua resposta e funcionou normalmente, aguardei meu retorno à empresa para testar no computador da minha empresa que foi onde tudo começou, e funcionou normalmente também, eu dei sequência no curso e fui até a atividade 6 da aula 3 (Parte 2) e só agora testei novamente dessa forma e funcionou, talvez a instalação da biblioteca NewtonSoft tenha influenciado alguma coisa?

O que importa agora é que está tudo funcionando. Continuarei as aulas satisfeito, muito obrigado pela atenção!

Sinceramente eu não sei qual das mensagens do tópico marco como solução para finalizar o processo.

solução!

Pois é Raphael, as vezes pode acontecer esses casos bizarros de atualizar um arquivo e funcionar. Talvez a versão da biblioteca estivesse com algum bug. Mas com o tempo vamos nos acostumando com esse tipo de erro.

Ah, não esqueça de marcar esse tópico como solucionado, assim pode ajudar outros alunos. Bons estudos!