2016-04-10 27 views
-1

私はそれが行われたSubの外に "channels"変数を使用しようとしています。チュートリアルを見て、チュートリアルで言われたことと同じことをしましたが、それでも仕事はありません。VB.NET - NullReferenceException - 別のサブ変数で変数を使用する

私は文字通り午前7時のようになるまで上がっていましたが、今では頭痛を感じています。

Error:

コード:

Imports Newtonsoft.Json 

Public Class Pragma 

    'On Application Load; 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     'Disable Illegal Cross Checks; 
     CheckForIllegalCrossThreadCalls = False 

     'Get the Channel Data; (Stream, Title e.t.c) 
     ProcessChannels.RunWorkerAsync() 

    End Sub 

    Public channels(0, 0) As String 

    'Process the Channel Information; 
    Public Sub ProcessChannels_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles ProcessChannels.DoWork 

     'Try to Load the Channel Data; 
     Try 

      'Connect to the Proxy Source; 
      Dim source As Net.HttpWebRequest = Net.WebRequest.Create("http://gameshare.io/pragma/channels.php") 

      'Prepare the Response; 
      Dim response As Net.HttpWebResponse = source.GetResponse 

      'Load the HTML; 
      Dim reader As IO.StreamReader = New IO.StreamReader(response.GetResponseStream()) 
      Dim html As String = reader.ReadToEnd 

      'Convert the JSON to a Readable Array; 
      Dim json = JsonConvert.DeserializeObject(html) 

      'UK Channels Quantity; 
      Dim quantity As Integer = json("Quantity").ToString - 1 

      'UK Channels Info; 
      Dim channels(quantity, 1) As String 

      For i As Integer = 0 To quantity Step 0 

       For Each Row In json("Channels") 

        Try 

         'Add the Channel Title and Stream to the Multi-Dimensional Array; 
         channels(i, 0) = Row(i)("title").ToString 
         channels(i, 1) = Row(i)("stream").ToString 

        Catch ex As Exception 

         'Random Error Occured; 
         Console.Write("Random no reason error occured.", "ERROR") 

        End Try 

       Next 

       'Incremement the Row Value; 
       i += 1 

      Next 

      'Test; 
      MessageBox.Show(channels(1, 1).ToString, channels(1, 0).ToString) 

     Catch ex As Exception 

      'Channel Data couldn't be loaded; 
      Console.WriteLine("ERROR: Channel Data could not be Loaded! Try again later!") 

     End Try 



    End Sub 

    'When the user changes the Genre; 
    Private Sub Genres_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Genres.SelectedIndexChanged 

     MessageBox.Show(channels(0, 0).ToString, channels(0, 0).ToString) 

     'Clear the Current Channels List; 
     ChannelsBox.Items.Clear() 

     'Check what Genre they chose; 
     Select Case Genres.Text 

      'If they chose Entertainment, Make the Entertainment ComboBox Visible and Enabled; 
      Case Is = "All Channels" 

       'Entertainment; 
       ChannelsBox.Items.Add("Comedy Central (UK)") 
       ChannelsBox.Items.Add("Comedy Central +1 (UK)") 
       ChannelsBox.Items.Add("Comedy Central Extra (UK)") 
       ChannelsBox.Items.Add("AMC") 
       ChannelsBox.Items.Add("TruTV (UK)") 
       ChannelsBox.Items.Add("Sky Living") 
       ChannelsBox.Items.Add("Sky Arts") 
       ChannelsBox.Items.Add("RTE One") 
       ChannelsBox.Items.Add("RTE Two") 
       ChannelsBox.Items.Add("3E") 
       ChannelsBox.Items.Add("TLC (UK)") 

       'Kids; 
       ChannelsBox.Items.Add("Disney XD (UK)") 
       ChannelsBox.Items.Add("Disney Channel (UK)") 
       ChannelsBox.Items.Add("Nickelodeon") 
       ChannelsBox.Items.Add("Nicktoons (UK)") 
       ChannelsBox.Items.Add("Nick Jr (UK)") 
       ChannelsBox.Items.Add("Nick Jr Too (UK)") 
       ChannelsBox.Items.Add("Disney Junior (UK)") 

       'Sports; 
       ChannelsBox.Items.Add("BT Sport 1") 
       ChannelsBox.Items.Add("BT Sport 2") 
       ChannelsBox.Items.Add("BT Sport Extra") 
       ChannelsBox.Items.Add("Sky Sports 1") 
       ChannelsBox.Items.Add("Sky Sports 2") 
       ChannelsBox.Items.Add("Sky Sports 3") 
       ChannelsBox.Items.Add("Sky Sports 4") 
       ChannelsBox.Items.Add("Sky Sports 5") 
       ChannelsBox.Items.Add("Premiere Sports") 
       ChannelsBox.Items.Add("Setanta Sports 1") 
       ChannelsBox.Items.Add("Setanta Sports Ireland") 
       ChannelsBox.Items.Add("ESPN") 

       'Movies; 
       ChannelsBox.Items.Add("Sky Movies Action") 
       ChannelsBox.Items.Add("Sky Movies Select") 
       ChannelsBox.Items.Add("Sky Movies Family") 
       ChannelsBox.Items.Add("Sky Movies Disney") 
       ChannelsBox.Items.Add("Sky Movies Thriller") 
       ChannelsBox.Items.Add("Sky Movies Comedy") 
       ChannelsBox.Items.Add("Sky Movies Premiere") 
       ChannelsBox.Items.Add("Sky Movies Showcase") 
       ChannelsBox.Items.Add("Sky Movies Harry Potter") 

       'Music; 
       ChannelsBox.Items.Add("Vevo 1") 
       ChannelsBox.Items.Add("Vevo 2") 
       ChannelsBox.Items.Add("Vevo 3") 

      'If they chose Entertainment; 
      Case Is = "Entertainment" 

       'Add only the Sports Channels; 
       ChannelsBox.Items.Add("Comedy Central (UK)") 
       ChannelsBox.Items.Add("Comedy Central +1 (UK)") 
       ChannelsBox.Items.Add("Comedy Central Extra (UK)") 
       ChannelsBox.Items.Add("AMC") 
       ChannelsBox.Items.Add("TruTV (UK)") 
       ChannelsBox.Items.Add("Sky Living") 
       ChannelsBox.Items.Add("Sky Arts") 
       ChannelsBox.Items.Add("RTE One") 
       ChannelsBox.Items.Add("RTE Two") 
       ChannelsBox.Items.Add("3E") 
       ChannelsBox.Items.Add("TLC (UK)") 

      'If they chose Kids; 
      Case Is = "Kids" 

       'Add only the Kids Channels; 
       ChannelsBox.Items.Add("Disney XD (UK)") 
       ChannelsBox.Items.Add("Disney Channel (UK)") 
       ChannelsBox.Items.Add("Nicktoons (UK)") 
       ChannelsBox.Items.Add("Nickelodeon") 
       ChannelsBox.Items.Add("Nick Jr (UK)") 
       ChannelsBox.Items.Add("Nick Jr Too (UK)") 
       ChannelsBox.Items.Add("Disney Junior (UK)") 

      'If they chose Sports; 
      Case Is = "Sports" 

       'Add only the Sports Channels; 
       ChannelsBox.Items.Clear() 
       ChannelsBox.Items.Add("BT Sport 1") 
       ChannelsBox.Items.Add("BT Sport 2") 
       ChannelsBox.Items.Add("BT Sport Extra") 
       ChannelsBox.Items.Add("Sky Sports 1") 
       ChannelsBox.Items.Add("Sky Sports 2") 
       ChannelsBox.Items.Add("Sky Sports 3") 
       ChannelsBox.Items.Add("Sky Sports 4") 
       ChannelsBox.Items.Add("Sky Sports 5") 
       ChannelsBox.Items.Add("Premiere Sports") 
       ChannelsBox.Items.Add("Setanta Sports 1") 
       ChannelsBox.Items.Add("Setanta Sports Ireland") 
       ChannelsBox.Items.Add("ESPN") 

      'If they chose Movies; 
      Case Is = "Movies" 

       'Add only the Movie Channels; 
       ChannelsBox.Items.Add("Sky Movies Action") 
       ChannelsBox.Items.Add("Sky Movies Select") 
       ChannelsBox.Items.Add("Sky Movies Family") 
       ChannelsBox.Items.Add("Sky Movies Disney") 
       ChannelsBox.Items.Add("Sky Movies Thriller") 
       ChannelsBox.Items.Add("Sky Movies Comedy") 
       ChannelsBox.Items.Add("Sky Movies Premiere") 
       ChannelsBox.Items.Add("Sky Movies Showcase") 
       ChannelsBox.Items.Add("Sky Movies Harry Potter") 

      'If they chose Music; 
      Case Is = "Music" 

       'Add only the Music Channels; 
       ChannelsBox.Items.Add("Vevo 1") 
       ChannelsBox.Items.Add("Vevo 2") 
       ChannelsBox.Items.Add("Vevo 3") 

     End Select 

    End Sub 

    'A Channel was Selected! Lets load the right Livestream; 
    Private Sub Channels_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ChannelsBox.SelectedIndexChanged, ChannelsBox.SelectedIndexChanged 

     'Play the Selected Channel In a New Thread; 
     BackgroundWorker1.RunWorkerAsync() 

    End Sub 

    Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 

     'Enable Fullscreen; 
     AxVLCPlugin21.FullscreenEnabled = True 

     'Stop and Clear whatever is currently Playing; 
     AxVLCPlugin21.playlist.stop() 
     AxVLCPlugin21.playlist.items.clear() 

     Select Case ChannelsBox.Text 

      '-- Entertainment ----------------------------------------------------------------------------- 
      Case Is = "Comedy Central (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Comedy Central +1 (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Comedy Central Extra (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "AMC" 
       AxVLCPlugin21.playlist.add("http://167.114.102.27/live/sV-M4frWzTGE_6zpoqovlg/1460241688/7c52ed5b8820b7dfd90b5a784bac64b3.m3u8") 

      Case Is = "TruTV (UK)" 
       AxVLCPlugin21.playlist.add("http://llnw.live.simplestream.com/coder5/coder.channels.channel2/hls/4/playlist.m3u8") 

      Case Is = "Sky Living" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Arts" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "RTE One" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "RTE Two" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "3E" 
       AxVLCPlugin21.playlist.add("http://89.163.148.31:8000/live/pierre/pierre/2836.ts") 

      Case Is = "TLC (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      '-- Kids --------------------------------------------------------------------------------------- 
      Case Is = "Disney XD (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Disney Channel (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Nickelodeon" 
       AxVLCPlugin21.playlist.add("http://167.114.102.27/live/gxI1pOqd03ArCE1WhsKUdg/1460241144/b11cc9ad84502b27a63fa7a8d813ef6a.m3u8") 

      Case Is = "Nicktoons (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Nick Jr (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Nick Jr Too (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Disney Junior (UK)" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      '-- Sports -------------------------------------------------------------------------------------- 
      Case Is = "BT Sport 1" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "BT Sport 2" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "BT Sport Extra" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Sports 1" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Sports 2" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Sports 3" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Sports 4" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Sports 5" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Premiere Sports" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Setanta Sports 1" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Setanta Sports Ireland" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "ESPN" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      '-- Movies -------------------------------------------------------------------------------------- 
      Case Is = "Sky Movies Action" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Select" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Family" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Disney" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Thriller" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Comedy" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Premiere" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Showcase" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sky Movies Harry Potter" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      Case Is = "Sony Movies" 
       AxVLCPlugin21.playlist.add("https://i.ytimg.com/vi/y5qYUsmZNHg/maxresdefault.jpg") 

      '-- Music -------------------------------------------------------------------------------------- 
      Case Is = "Vevo 1" 
       AxVLCPlugin21.playlist.add("http://vevoplaylist-live.hls.adaptive.level3.net/vevo/ch1/06/prog_index.m3u8") 

      Case Is = "Vevo 2" 
       AxVLCPlugin21.playlist.add("http://vevoplaylist-live.hls.adaptive.level3.net/vevo/ch2/06/prog_index.m3u8") 

      Case Is = "Vevo 3" 
       AxVLCPlugin21.playlist.add("http://vevoplaylist-live.hls.adaptive.level3.net/vevo/ch3/06/prog_index.m3u8") 

     End Select 

     'Focus and Play the current loaded Livestream; 
     AxVLCPlugin21.Focus() 
     AxVLCPlugin21.playlist.play() 

    End Sub 

    'Mute Button; 
    Private Sub Mute_CheckedChanged(sender As Object, e As EventArgs) Handles Mute.CheckedChanged 

     'If it's Checked, Set VLC's Volume to 0, Otherwise set it to 100; 
     If Mute.Checked Then 
      AxVLCPlugin21.volume = "0" 
     Else 
      AxVLCPlugin21.volume = "100" 
     End If 

    End Sub 

End Class 
+0

確かに、私がそれを作ったのと同じサブに置くとうまくいくと言うだけです。チャンネルは、http://gameshare.io/pragma/channelsからフェッチされたJSONのDeSerializingによって取得されます。PHP – ShinyMK

+0

ローカルチャンネルとして 'channels'を宣言していますので、tjhatメソッドにのみ存在します – Plutonix

+0

ProcessChannels_DoWork内でローカルスコープのチャンネル変数を宣言していますか?ローカル変数の名前を別のものに変更したいと思うかもしれません。混乱する可能性があります。 – bpursley

答えて

0

あなたの質問への答えはあなたが文字列の2次元配列を宣言していますが、要素の.ToString()を呼び出そうとする前にそれに何も配置していないです(0、0)の位置にあります。まだ配列に何も入れていないため、null/Nothingです。

Public channels(,) As String = {{""}} 

要素(0、0)の2次元配列が、プットを「」宣言し、どの:あなたはこの問題を解決することができ

一つの方法は、このように、あなたはそれを宣言時に配列を初期化することです。それでは、あなたはそのエラーをもう犯さないでしょう。

EDIT: 多次元配列を使用する代わりに、リストとカスタムクラスでこれを行う方法を示す編集を依頼しました。

コメントに記載されているように、.NETの配列は実際には配列に項目を動的に追加したり削除したりする必要がある場合には最適ではありません。このような状況では、カスタムクラスのリストが適しています。

だからあなたのコードは、このようなものになると:

Public Class Pragma 

    Public Class Channel 
     Public Property Title As String 
     Public property Stream As String 
    End Class 

    Public Channels As New List(Of Channel) 

    ... All your other code here ... 

End Class 

そして、これに代えて...

channels(i, 0) = Row(i)("title").ToString 
channels(i, 1) = Row(i)("stream").ToString 

これを行います...

Dim c as New Channel() 
c.Title = Row(i)("title").ToString() 
c.Stream = Row(i)("stream").ToString() 
Channels.Add(c) 

そしてもし後でチャンネルをループする必要があります。

For Each c in Channels 
    ... 
Next 

説明が役立ちますように願っています。あなたのコードには、ステップ0を持つForループのようないくつかの他の問題もあります。私はそれが何を意味しているのか分かりませんし、ループ自体の中でi + = 1をインクリメントしています。

あなたは、あまりにも難しく、ハンマーを使ってネジでネジ止めをしようとしていたと思います。確かにそれが入るかもしれないほど激しく打つなら、よりよい道具がある。リストを使用すると、コードを書くのがずっと簡単になります。

私はこれがより理にかなってほしいと思っていますが、そうでない場合は、長期的に役立ちます。

幸運のベスト。

+0

これはエラーを止めますが、私は2d配列の41行目に何も入れません。 (0,0)は(Row1、Column1)なので、最初のチャンネルを出力してはいけませんか? – ShinyMK

+0

あなたはクラスに定義されているチャンネル配列にそれを入れているわけではありません。そのチャンネル配列はその関数内でローカルに定義されています。 dimを使用するたびに、別のメモリ位置と寿命を持つ別の変数が作成されます。 – bpursley

+0

ああ、それは理にかなっています。このnoob Qのため申し訳ありませんが、どうすれば修正できますか?私はPHPとPHPの配列に使用される方法は異なる:/ – ShinyMK

関連する問題