"Object is not set to a reference" error message using accuweather lib

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Niels Koomans
    New Member
    • Apr 2013
    • 14

    "Object is not set to a reference" error message using accuweather lib

    well, now that i've finaly got the accuweather lib working it says "Object is not set to a reference" at "xel.Element("w eathertext").Va lue"

    Code:
    Imports System.Net
    Imports System.IO
    Imports System.Xml
    Imports System.Text
     
    Public Class WeatherClient
    #Region "Enums"
        Enum Language
            Dutch
            English
        End Enum
        Enum TemperatureScale
            Celcius
            Fahrenheit
        End Enum
    #End Region
    #Region "Constructor"
        Dim tmpscale As TemperatureScale
        Dim lang As Language
     
        Public Sub New(ByVal cityname As String, ByVal language As Language, tempscale As TemperatureScale)
            locat = cityname
            lang = language
            tmpscale = tempscale
            getconditions()
        End Sub
    #End Region
    #Region "Inner classes"
        Public Class CurrentConditions
     
            Dim cond As String
            Dim tmp As String
            Dim wnd As String
            Dim wnddir As String
            Dim rlfl As String
            Dim humid As Integer
            Dim visib As Integer
            Dim precip As Integer
            Dim uvindx As String
            Dim dwpnt As Integer
            Dim clcover As Integer
            Dim wchill As Integer
            Public ReadOnly Property Condition As String
                Get
                    Return cond
                End Get
            End Property
            Public ReadOnly Property Temperature As String
                Get
                    Return tmp
                End Get
            End Property
            Public ReadOnly Property WindSpeed As String
                Get
                    Return wnd
                End Get
            End Property
            Public ReadOnly Property WindDirection As String
                Get
                    Return wnddir
                End Get
            End Property
            Public ReadOnly Property RealFeal As String
                Get
                    Return rlfl
                End Get
            End Property
            Public ReadOnly Property Humidity As Integer
                Get
                    Return humid
                End Get
            End Property
            Public ReadOnly Property Visibility As Integer
                Get
                    Return visib
                End Get
            End Property
            Public ReadOnly Property Precipitation As Integer
                Get
                    Return precip
                End Get
            End Property
            Public ReadOnly Property UVIndex As String
                Get
                    Return uvindx
                End Get
            End Property
            Public ReadOnly Property DewPoint As Integer
                Get
                    Return dwpnt
                End Get
            End Property
            Public ReadOnly Property CloudCover As Integer
                Get
                    Return clcover
                End Get
            End Property
            Public ReadOnly Property WindChill As Integer
                Get
                    Return wchill
                End Get
            End Property
            Public Sub New(ByVal cnd As String, tmp2 As String, wnd2 As String, wnddir2 As String, rld As String, hum As String, vis As String, prec As String, uvn As String, dwn As String, clc As String, wc As String)
                cond = cnd
                tmp = tmp2
                wnd = wnd2
                wnddir = wnddir2
                rlfl = rld
                humid = hum
                visib = vis
                precip = prec
                uvindx = uvn
                dwpnt = dwn
                clcover = clc
                wchill = wc
            End Sub
        End Class
        Public Class ForecastCondition
     
            Dim dh As String
            Dim dl As String
            Dim drh As String
            Dim drl As String
            Dim ddwnspd As String
            Dim ddwndir As String
            Dim dramound As String
            Dim dsamound As String
            Dim diamound As String
            Dim dpamount As String
            Dim dtstormamount As String
            Dim nh As String
            Dim nl As String
            Dim nrh As String
            Dim nrl As String
            Dim ndwnspd As String
            Dim ndwndir As String
            Dim nramound As String
            Dim nsamound As String
            Dim niamound As String
            Dim npamount As String
            Dim ntstormamount As String
            Dim dncd As String
            Dim ncnd As String
            Dim daycod As String
            Public ReadOnly Property Day As String
                Get
                    Return daycod
                End Get
            End Property
            Public ReadOnly Property DayTime As DayTimer
                Get
                    Return New DayTimer(dh, dl, drh, drl, ddwnspd, ddwndir, dramound, dsamound, diamound, dpamount, dtstormamount, dncd)
                End Get
            End Property
            Public ReadOnly Property NightTime As NightTimer
                Get
                    Return New NightTimer(nh, nl, nrh, nrl, ndwnspd, ndwndir, nramound, nsamound, niamound, npamount, ntstormamount, ncnd)
                End Get
            End Property
            Public Sub New(ddh As String, dll As String, ddrh As String, ddrl As String, dddwnspd As String, dddwndir As String, ddramound As String, ddsamound As String, ddiamound As String, ddpamount As String, ddta As String _
                           , nnh As String, nnl As String, ndrh As String, ndrl As String, nwndspd As String, nwnddir As String, ndramount As String, ndsamound As String, ndiamound As String, ndpamound As String, ndta As String _
                           , dayc As String, dcond As String, ncond As String)
                dh = ddh
                dl = dll
                drh = ddrh
                drl = ddrl
                ddwnspd = dddwnspd
                ddwndir = dddwndir
                dramound = ddramound
                dsamound = ddsamound
                diamound = ddiamound
                dpamount = ddpamount
                dtstormamount = ddta
                nh = nnh
                nl = nnl
                nrh = ndrh
                nrl = ndrl
                ndwnspd = nwndspd
                ndwndir = nwnddir
                nramound = ndramount
                nsamound = ndsamound
                niamound = ndiamound
                npamount = ndpamound
                ntstormamount = ndta
                daycod = dayc
                dncd = dcond
                ncnd = ncond
            End Sub
            Class DayTimer
                Dim h As String
                Dim l As String
                Dim rh As String
                Dim rl As String
                Dim dwnspd As String
                Dim dwndir As String
                Dim ramound As String
                Dim samound As String
                Dim iamound As String
                Dim pamound As String
                Dim tstormamound As String
                Dim cond As String
                Public ReadOnly Property Condition As String
                    Get
                        Return cond
                    End Get
                End Property
                Public ReadOnly Property High As String
                    Get
                        Return h
                    End Get
                End Property
                Public ReadOnly Property Low As String
                    Get
                        Return l
                    End Get
                End Property
                Public ReadOnly Property RealFeelHigh As String
                    Get
                        Return rh
                    End Get
                End Property
                Public ReadOnly Property WindSpeed As String
                    Get
                        Return dwnspd
                    End Get
                End Property
                Public ReadOnly Property WindDirection As String
                    Get
                        Return dwndir
                    End Get
                End Property
                Public ReadOnly Property RainAmount As String
                    Get
                        Return ramound
                    End Get
                End Property
                Public ReadOnly Property SnowAmount As String
                    Get
                        Return samound
                    End Get
                End Property
                Public ReadOnly Property IceAmount As String
                    Get
                        Return iamound
                    End Get
                End Property
                Public ReadOnly Property Precipitation As String
                    Get
                        Return pamound
                    End Get
                End Property
                Public ReadOnly Property ThunderstormPropebility As String
                    Get
                        Return tstormamound
                    End Get
                End Property
                Public Sub New(hi As String, lo As String, rhi As String, hlo As String, wndspd As String, wnddir As String, r As String, s As String, i As String, p As String, ta As String, cnd As String)
                    h = hi
                    l = lo
                    rh = rhi
                    rl = hlo
                    dwnspd = wndspd
                    dwndir = wnddir
                    ramound = r
                    samound = s
                    iamound = i
                    pamound = p
                    tstormamound = ta
                    cond = cnd
                End Sub
            End Class
            Class NightTimer
     
                Dim h As String
                Dim l As String
                Dim rh As String
                Dim rl As String
                Dim dwnspd As String
                Dim dwndir As String
                Dim ramound As String
                Dim samound As String
                Dim iamound As String
                Dim pamound As String
                Dim tstormamound As String
                Dim cond As String
                Public ReadOnly Property Condition As String
                    Get
                        Return cond
                    End Get
                End Property
                Public ReadOnly Property High As String
                    Get
                        Return h
                    End Get
                End Property
                Public ReadOnly Property Low As String
                    Get
                        Return l
                    End Get
                End Property
                Public ReadOnly Property RealFeelHigh As String
                    Get
                        Return rh
                    End Get
                End Property
                Public ReadOnly Property WindSpeed As String
                    Get
                        Return dwnspd
                    End Get
                End Property
                Public ReadOnly Property WindDirection As String
                    Get
                        Return dwndir
                    End Get
                End Property
                Public ReadOnly Property RainAmount As String
                    Get
                        Return ramound
                    End Get
                End Property
                Public ReadOnly Property SnowAmount As String
                    Get
                        Return samound
                    End Get
                End Property
                Public ReadOnly Property IceAmount As String
                    Get
                        Return iamound
                    End Get
                End Property
                Public ReadOnly Property Precipitation As String
                    Get
                        Return pamound
                    End Get
                End Property
                Public ReadOnly Property ThunderstormPropebility As String
                    Get
                        Return tstormamound
                    End Get
                End Property
                Public Sub New(hi As String, lo As String, rhi As String, hlo As String, wndspd As String, wnddir As String, r As String, s As String, i As String, p As String, ta As String, cnd As String)
                    h = hi
                    l = lo
                    rh = rhi
                    rl = hlo
                    dwnspd = wndspd
                    dwndir = wnddir
                    ramound = r
                    samound = s
                    iamound = i
                    pamound = p
                    tstormamound = ta
                    cond = cnd
                End Sub
            End Class
        End Class
     
        Public Class ForecastCollection
            Inherits CollectionBase
            Public Overridable Sub Add(ByVal frday As ForecastCondition)
                Me.List.Add(frday)
            End Sub
        End Class
    #End Region
     
    #Region "Properties"
        Dim locat As String
        Dim cond As String
        Dim tmp As String
        Dim wnd As String
        Dim wnddir As String
        Dim rlfl As String
        Dim humid As Integer
        Dim visib As Integer
        Dim precip As Integer
        Dim uvindx As String
        Dim dwpnt As Integer
        Dim clcover As Integer
        Dim wchill As Integer
        Dim fconditionlist As New ForecastCollection
        Public ReadOnly Property Current As CurrentConditions
            Get
                Return New CurrentConditions(cond, tmp, wnd, wnddir, rlfl, humid, visib, precip, uvindx, dwpnt, clcover, wchill)
            End Get
        End Property
        Public ReadOnly Property Forecast As ForecastCollection
            Get
                Return fconditionlist
            End Get
        End Property
    #End Region
    #Region "Functions"
        Private Function getconditions()
            Dim wbreq As WebRequest
            Dim wbresp As WebResponse
            Select Case lang
                Case Language.Dutch
                    Select Case tmpscale
                        Case TemperatureScale.Celcius
                            wbreq = WebRequest.Create("http://asus1.accu-weather.com/widget/asus1/weather-data.asp?location=" & locat & "&metric=1&langId=6")
                            wbresp = wbreq.GetResponse
                        Case TemperatureScale.Fahrenheit
                            wbreq = WebRequest.Create("http://asus1.accu-weather.com/widget/asus1/weather-data.asp?location=" & locat & "&metric=0&langId=6")
                            wbresp = wbreq.GetResponse
                    End Select
                Case Language.English
                    Select Case tmpscale
                        Case TemperatureScale.Celcius
                            wbreq = WebRequest.Create("http://asus1.accu-weather.com/widget/asus1/weather-data.asp?location=" & locat & "&metric=1&langId=1")
                            wbresp = wbreq.GetResponse
                        Case TemperatureScale.Fahrenheit
                            wbreq = WebRequest.Create("http://asus1.accu-weather.com/widget/asus1/weather-data.asp?location=" & locat & "&metric=0&langId=1")
                            wbresp = wbreq.GetResponse
                    End Select
            End Select
     
            Dim strreader As New StreamReader(wbresp.GetResponseStream, Encoding.UTF8)
            Dim xml As String = strreader.ReadToEnd
            Dim xdoc As XDocument = XDocument.Parse(xml)
            Dim xel As XElement = xdoc.Root.Element(XName.Get("currentconditions", xdoc.Root.Name.Namespace.NamespaceName))
            cond = xel.Element("weathertext").Value
            tmp = xel.Element("temperature").Value
            wnd = xel.Element("windspeed").Value
            wnddir = xel.Element("winddirection").Value
     
            rlfl = xel.Element("realfeel").Value
            humid = xel.Element("humidity").Value
            visib = xel.Element("visibility").Value
            precip = xel.Element("precip").Value
            uvindx = xel.Element("uvindex").Attribute("index").Value & " - " & xdoc.Element("uvindex").Value
            dwpnt = xel.Element("dewpoint").Value
            clcover = xel.Element("cloudcover").Value
            wchill = xel.Element("windchill").Value
            For Each nod As XElement In xdoc.Root.Element(XName.Get("forecast", xdoc.Root.Name.Namespace.NamespaceName)).Elements()
                Dim dh As Integer
                Dim dl As Integer
                Dim drh As Integer
                Dim drl As Integer
                Dim ddwnspd As Integer
                Dim ddwndir As String
                Dim dramound As Integer
                Dim dsamound As Integer
                Dim diamound As Integer
                Dim dpamount As Integer
                Dim dtstormamount As Integer
                Dim nh As Integer
                Dim nl As Integer
                Dim nrh As Integer
                Dim nrl As Integer
                Dim ndwnspd As Integer
                Dim ndwndir As String
                Dim nramound As Integer
                Dim nsamound As Integer
                Dim niamound As Integer
                Dim npamount As Integer
                Dim ntstormamount As Integer
                Dim daycod As String
                Dim daycnd As String
                Dim ncnd As String
                Dim dt As XElement = nod.Element("daytime")
                dh = dt.Element("hightemperature").Value
                dl = dt.Element("lowtemperature").Value
                drh = dt.Element("realfeelhigh").Value
                drl = dt.Element("realfeellow").Value
                ddwnspd = dt.Element("windspeed").Value
                ddwndir = dt.Element("winddirection").Value
                dramound = dt.Element("rainamount").Value
                dsamound = dt.Element("snowamount").Value
                diamound = dt.Element("iceamount").Value
                dpamount = dt.Element("precipamount").Value
                dtstormamount = dt.Element("tstormprob").Value
                daycnd = dt.Element("txtshort").Value
                Dim nt As XElement = nod.Element("nighttime")
                nh = nt.Element("hightemperature").Value
                nl = nt.Element("lowtemperature").Value
                nrh = nt.Element("realfeelhigh").Value
                nrl = nt.Element("realfeellow").Value
                ndwnspd = nt.Element("windspeed").Value
                ndwndir = nt.Element("winddirection").Value
                nramound = nt.Element("rainamount").Value
                nsamound = nt.Element("snowamount").Value
                niamound = nt.Element("iceamount").Value
                npamount = nt.Element("precipamount").Value
                ntstormamount = nt.Element("tstormamount").Value
                ncnd = nt.Element("txtshort").Value
                daycod = nod.Element("daycode").Value
                fconditionlist.Add(New ForecastCondition(dh, dl, drh, drl, ddwnspd, ddwndir, dramound, dsamound, diamound, dpamount, dtstormamount, nh, nl, nrh, nrl, ndwnspd, ndwndir, nramound, nsamound, niamound, npamount, ntstormamount, daycod, daycnd, ncnd))
            Next
        End Function
    #End Region
     
    End Class
  • !NoItAll
    Contributor
    • May 2006
    • 297

    #2
    Change
    Code:
    Dim xel As XElement = xdoc.Root.Element(XName.Get("currentconditions", xdoc.Root.Name.Namespace.NamespaceName))
    To
    Code:
    Dim xel As New XElement
    xel = xdoc.Root.Element(XName.Get("currentconditions", xdoc.Root.Name.Namespace.NamespaceName))

    Comment

    Working...