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

System.NullReferenceException

Ao tentar navegar para a página de Agendamento após a separação da classe agendamento me retorna:

04-04 07:35:37.373 E/mono    (20411): 
04-04 07:35:37.373 E/mono    (20411): Unhandled Exception:
04-04 07:35:37.373 E/mono    (20411): System.NullReferenceException: Object reference not set to an instance of an object.
04-04 07:35:37.373 E/mono-rt (20411): [ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object.

O erro acontece exatamente na linha da classe Agendamento:

public Agendamento Agendamento { get; set; }

Segue o código :

AgendamentoView.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestDrive.Models;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace TestDrive.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class AgendamentoView : ContentPage
    {
        public Agendamento Agendamento { get; set; }


        public Veiculo Veiculo
        {
            get { return Agendamento.Veiculo; }
            set { Agendamento.Veiculo = value; }
        }
        public string Nome
        {
            get { return Agendamento.Nome; }
            set { Agendamento.Nome = value; }
        }
        public string Fone
        {
            get { return Agendamento.Fone; }
            set { Agendamento.Fone = 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 AgendamentoView(Veiculo veiculo)
        {
            InitializeComponent();
            //this.Title = veiculo.Nome;
            this.Veiculo = veiculo;
            this.BindingContext = this;
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            DisplayAlert("Agendamento",
                string.Format(@"Nome:{0}
                Fone:{1}
                E-mail:{2}
                Data Agendamento:{3}
                Hora Agendamento:{4}", Nome, Fone, Email, DataAgendamento.ToString("dd/MM/yyyy"), HoraAgendamento), "OK");
        }
    }
}

Agendamento.cs

using System;
using System.Collections.Generic;
using System.Text;


namespace TestDrive.Models
{
    public class Agendamento
    {
        public Veiculo Veiculo { get; set; }
        public string Nome { get; set; }
        public string Fone { get; set; }
        public string Email { get; set; }

        public DateTime dataAgendamento = DateTime.Today;
        public DateTime DataAgendamento
        {
            get
            {
                return dataAgendamento;
            }
            set
            {
                dataAgendamento = value;
            }
        }
        public TimeSpan HoraAgendamento { get; set; }
    }
}

Não sei onde está o erro. Poderia me ajudar? Obrigado, Antõnio

7 respostas

Antonio, o código onde você disse que está o erro é exatamente o problema. Dê uma olhada:

public Agendamento Agendamento { get; set; }

O computador não consegue diferenciar entre a classe e a variável caso elas tenham o mesmo nome, e vai achar que você esqueceu de declarar o nome da variável. O erro Object reference not set to an instance of an object. deixa isso claro: não existe uma referência a uma instância de objeto.

também dá o mesmo erro quando altero o nome da variável public Agendamento agendamento { get; set; }

solução!

Olá, Antonio,

Pelo vídeo da aula, parece que faltaram estas linhas no seu código:

        public AgendamentoView(Veiculo veiculo)
        {
            InitializeComponent();
            this.Agendamento = new Agendamento(); /* faltou esta linha*/
            this.Agendamento.Veiculo = veiculo; /* faltou esta linha*/
            this.BindingContext = this;
        }

Obrigado! Realmente funcionou, não respondi antes pois estava no trabalho e de lá não tenho acesso!

Excelente, Antonio! Fico feliz por ter ajudado. E obrigado por prestigiar nosso curso! Fique ligado que em breve teremos a parte 2 do curso de Xamarin, com tela de login, páginas com abas, menu, captura de imagem da câmera, banco de dados e conversão de valores de binding!

Realmente aguardo essa segunda parte! Gostei muito da didática! Parabéns!

Muito bom esse curso, não havia achado a referência do Agendamento no AgendamentoView, mas ele estava no final do vídeo.

Parabéns pelo ótimo curso até o momento!