Object reference not set to an instance of an object

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Topicstarter
De welbekende foutmelding...
Ik gebruik de code van dit kb artikel: How To Populate a TreeView Control with XML Data in Visual Basic .NET om XML data in een treeview te laden.

Mijn code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Public Sub Load(ByVal fileName As String)
        Try
            ' SECTION 1. Create a DOM Document and load the XML data into it.
            Dim dom As New XmlDocument()
            dom.Load(fileName)

            ' SECTION 2. Initialize the treeview control.
            main.tvConnections.Nodes.Clear()
            main.tvConnections.Nodes.Add(New TreeNode(dom.DocumentElement.Name))
            Dim tNode As New TreeNode()
            tNode = main.tvConnections.Nodes(0)

            ' SECTION 3. Populate the TreeView with the DOM nodes.
            AddNode(dom.DocumentElement, tNode)
            tNode.Expand()

        Catch xmlEx As XmlException
            MessageBox.Show(xmlEx.Message)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub

    Private Shared Sub AddNode(ByRef inXmlNode As XmlNode, ByRef inTreeNode As TreeNode)
        Dim xNode As XmlNode
        Dim tNode As TreeNode
        Dim nodeList As XmlNodeList
        Dim i As Integer

        ' Loop through the XML nodes until the leaf is reached.
        ' Add the nodes to the TreeView during the looping process.
        If inXmlNode.HasChildNodes() Then
            nodeList = inXmlNode.ChildNodes
            For i = 0 To nodeList.Count - 1
                xNode = inXmlNode.ChildNodes(i)
                inTreeNode.Nodes.Add(New TreeNode(xNode.Attributes("Name").Value))
                tNode = inTreeNode.Nodes(i)
                AddNode(xNode, tNode)
            Next
        Else
            inTreeNode.Text = (inXmlNode.OuterXml).Trim
        End If
    End Sub


Als ik een breakpoint zet op regel 36, zie ik dat de xNode wel degelijk data bevat: xNode = "Element, Name="Node""

Maar toch krijg ik de melding "Object reference not set to an instance of an object"
Deze error treed op op regel 37. Het gaat om het volgende stukje: xNode.Attributes("Name").Value

Weet iemand hoe ik dit verder kan debuggen / verhelpen?

[ Voor 2% gewijzigd door RobIII op 13-04-2010 21:22 . Reden: Codetags gefixed ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mike2k schreef op dinsdag 13 april 2010 @ 21:08:
Visual Basic .NET:
1
                xNode = inXmlNode.ChildNodes(i)

Maar toch krijg ik de melding "Object reference not set to an instance of an object"

Weet iemand hoe ik dit verder kan debuggen / verhelpen?
Ik zou eens beginnen mijn gezond verstand te gebruiken ;) xNode is nog geset van de vorige iteratie (althans, die blijkt data te bevatten volgens jou) en nu probeer je 'm te assignen. Welke variabele(n) zie je nog meer op die regel naast xNode?

Dat betekent dat je met debuggen naar de verkeerde variabele zit te kijken.

(Even aangenomen dat de fout ook op regel 36 optreedt).

[ Voor 21% gewijzigd door RobIII op 13-04-2010 21:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Topicstarter
RobIII schreef op dinsdag 13 april 2010 @ 21:13:
[...]

Ik zou eens beginnen mijn gezond verstand te gebruiken ;) xNode is nog geset van de vorige iteratie en nu probeer je 'm op een niet-bestaande childnode te zetten.
Dat betekent dat je met debuggen naar de verkeerde variabele zit te kijken.

(Even aangenomen dat de fout ook op regel 36 optreedt).
Sorry, vergeten erbij te zetten dat de error op regel 37 is.

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mike2k schreef op dinsdag 13 april 2010 @ 21:18:
[...]


Sorry, vergeten erbij te zetten dat de error op regel 37 is.
Dan kijk eens verder dan je neus lang is (en debug for Pete's sake eens fatsoenlijk). Geheid dat de node in die iteratie dan geen Name attribuut heeft of dat inTreeNode "Nothing" (null) is ofzo, wat weer zou betekenen dat tNode bij de aanroep van AddNode leeg/null/nothing zou zijn.

Dit is puur een kwestie van fatsoenlijk debuggen. Een topic openen duurt langer dan 3 seconden je debugger fatsoenlijk bekijken.
Mike2k schreef op dinsdag 13 april 2010 @ 21:08:
Maar toch krijg ik de melding "Object reference not set to an instance of an object"
Deze error treed op op regel 37. Het gaat om het volgende stukje: xNode.Attributes("Name").Value
Fijn dat dat meteen erbij stond ;)

Nogmaals: Je ziet 3 relevante zaken in die regel: inTreeNode, xNode en diens Attributes("Name"). Elk van de 3 kan leeg zijn en alledrie zal dat een andere reden hebben. Volgens jou is xNode niet Nothing/null dus moet het ophalen van het Name attribuut falen of AddNode is aangeroepen met een lege inTreeNode. Gewoon debuggen en logisch nadenken.

[ Voor 62% gewijzigd door RobIII op 13-04-2010 21:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Topicstarter
shame on * Mike2k
Het hele spul is case sensitive, daar had ik geen rekening mee gehouden.
Het attribute in de xml file heet name en niet Name..

Maar, hoe kan ik dit dan fatsoenlijk debuggen ? Ik zag echt niet dat het attribute niet bestond.

[ Voor 3% gewijzigd door Mike2k op 13-04-2010 21:27 ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mike2k schreef op dinsdag 13 april 2010 @ 21:26:
Maar, hoe kan ik dit dan fatsoenlijk debuggen ? Ik zag echt niet dat het attribute niet bestond.
Gewoon kijken (voor mijn part Console.Writeline je het, maar kijk beter gewoon in je debugger onder locals/autos of hover over de variabelen) wat .Attributes("Name") teruggeeft :? Daarbij kun je het al simpelweg uitsluiten door te kijken of de rest van de zaken in die regel bevatten wat je verwacht. inTreeNode zal dus geset zijn, xNode was volgens jou al geset; nah... dan blijft er weinig over he? En dan is het eerste waar ik aan denk als het over XML gaat: case.

[ Voor 47% gewijzigd door RobIII op 13-04-2010 21:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Topicstarter
Dat dacht ik ook, dus ik heb geprobeerd: msgbox(xNode.Attributes("Name").Value) te doen, maar dit gaf ook dezelfde error.

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mike2k schreef op dinsdag 13 april 2010 @ 21:28:
Dat dacht ik ook, dus ik heb geprobeerd: msgbox(xNode.Attributes("Name").Value) te doen, maar dit gaf ook dezelfde error.
Omdat je de .Value property van een niet-bestaand object niet kunt uitlezen. .Attributes("Name") returned een Nothing itt een object dat jij verwacht en Nothing heeft geen .Value property. (En met MsgBoxes debuggen is zooooooooo 1992)

[ Voor 9% gewijzigd door RobIII op 13-04-2010 21:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BvDorp
  • Registratie: Januari 2004
  • Laatst online: 14-09 16:39
Yo Mod, gezellige bende maak je ervan. Tof :-)

In het begin van het programmeren liep ik ook vaak tegen dit soort dingen aan. Het duurt even voordat je doorkrijgt hoe debuggen werkt. Leren moet je ook leren, programmeerwerk moet je ook leren debuggen.

Kent iemand toevallig een goede tutorial in debugging?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
BvDorp schreef op donderdag 15 april 2010 @ 19:59:
Kent iemand toevallig een goede tutorial in debugging?
Een begin: Debuggen: Hoe doe ik dat?
Verder scheelt een fatsoenlijke IDE (waar Visual Studio toch echt wel koning is) behoorlijk; als je dan de tools die tot je beschikking staat voor 't debuggen goed weet te gebruiken is debuggen over het algemeen peanuts.

[ Voor 28% gewijzigd door RobIII op 15-04-2010 20:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1