Array operation attempted on variable not DIM'd

I am working on updating my channel,here is a problem ,I manage to narrow down my problem and can reproduce it here.
I get this error as I tried to move from the spring board to the video screen

Array operation attempted on variable not DIM’d. (runtime error &he7) in …kg:/source/AppSpringboard.brs(39)

039: PlayVideo(videos[msg.GetIndex()])
Backtrace:
Function showspringboardscreen(video As ) As Integer
file/line: /tmp/plugin/MBBAAAxy1j0…kg:/source/AppSpringboard.brs(39)
Function showposterscreen(videos As ) As Integer
file/line: /tmp/plugin/MBBAAAxy1j08/pkg:/source/AppMain.brs(82)
Function loadjsonfile() As
file/line: /tmp/plugin/MBBAAAxy1j08/pkg:/source/AppMain.brs(51)
Function main() As
file/line: /tmp/plugin/MBBAAAxy1j08/pkg:/source/AppMain.brs(15)

the springboard seems ok as content data is there
here is the function for the video player

Function PlayVideo(video as object) as integer

If I move from the posterscreen to the videoplayer the each video will play based on the array like here

if type(msg) = "roPosterScreenEvent"
            if (msg.isListItemSelected())
               'PlayVideo(videos[msg.GetIndex()])  ''This work with this'"2"
                ShowSpringboardScreen(videos[msg.GetIndex()])
                else if (msg.isScreenClosed())

any suggestions,I might have been away too long,so I am losing the “mojo”

Try adding

print type(videos)
print msg.getindex()
print videos.count()
print videos[msg.getindex()]

immediately before PlayVideo(videos[msg.GetIndex()])

as a troubleshooting step. Maybe the index is higher than the number of videos in the array?

  • Joel

You didn’t show where you initialized the videos variable, but apparently it is not an array.

–Mark

here is the array

Function ShowPosterScreen(videos as object) as integer
 posterScreen = CreateObject("roPosterScreen")
    port = CreateObject("roMessagePort")
    posterScreen.SetMessagePort(port)

contentList = CreateObject("roArray",25, true)
    for each video in videos
        poster = CreateObject("roAssociativeArray")
         poster.ShortDescriptionLine1 = video.Title
            poster.SDPosterURL = video.Image
            poster.HDPosterURL = video.Image
            contentList.push( poster )
    end for

    posterScreen.SetContentList( contentList )

here is the json

Function LoadJSONFile() as void
    jsonAsString = ReadAsciiFile("pkg:/json/sample1.json")
    m.json = ParseJSON(jsonAsString)

    ShowPosterScreen(m.json.Videos)
End Function

this is what I get when i used the print statement

------ Running ------
SpringBoardButton Pressed: 5 index: 1

1
BrightScript Micro Debugger.
Enter any BrightScript statement, debug commands, or HELP.


Array operation attempted on variable not DIM’d. (runtime error &he7) in …kg:/source/AppSpringboard.brs(40)

040: print videos[msg.getindex()]
Backtrace:

I had 20 in the array but 21 videos so I move it to 25
also print videos.count() gives the following error

‘Dot’ Operator attempted with invalid BrightScript Component or interface reference. (runtime error &hec) in …kg:/source/AppSpringboard.brs(40)

040: print videos.count();
do you think my problem is

 ShowPosterScreen(m.json.Videos)

When you printed “videos”, the output was “”. That’s your problem. Perhaps you created the videos variable in a different scope than where you’re using it.

–Mark

Feedback
Thanks everyone
kbenson clarified the “m” for me in this post
http://forums.roku.com/viewtopic.php?f=34&t=31874
and jbrave-Joel in this post
http://forums.roku.com/viewtopic.php?f=34&t=39414 so I modify my loadfeed() to

Function LoadJSONFile() as void
    jsonAsString = ReadAsciiFile("pkg:/json/sample1.json")
    feedinfo = ParseJSON(jsonAsString)
     ShowPosterScreen(feedinfo.Videos)
End Function

RokuMarkn pointed out that

When you printed “videos”, the output was "

I found out I was calling videos to play on the videoscreen when I only needed one video so I modify

PlayVideo(videos[msg.GetIndex()])

to match my

Function PlayVideo(video as object) as integer

and so thanks Joel and endless for this beautiful tip on"
Need Help Understanding CreateObject()"

http://forums.roku.com/viewtopic.php?p=255658&sid=cbe3599496ebe07c5760788be91faeac

and finally Joel and whomever said “print” is your friend might I also add “STOP

Here are the results of the print

Using Json

------ Running ------
msg: idx:  8
roArray
 8
 20
Image: http://xxx.xxx.xxx.xxx/someimage.png
Url: http://xxx.xxx.xxx.xxx:1935/xxx/xxx/playlist.m3u8

Title: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

SpringBoardButton Pressed:  5 index:  1
roAssociativeArray
 1
showVideoScreen | msg = Stream started. | index =  0
showVideoScreen | msg = HLS segment info | index =  0
showVideoScreen | msg = HLS segment info | index =  7000
showVideoScreen | msg = HLS segment info | index =  14000
showVideoScreen | msg = Playback paused. | index =  0

Using XML Parsing

Using xml

------ Running ------
msg: idx:  7
roXMLList
 7
 20
<Component: roXMLElement>
SpringBoardButton Pressed:  5 index:  1
roXMLElement
 1
showVideoScreen | msg = Stream started. | index =  0
showVideoScreen | msg = HLS segment info | index =  0
showVideoScreen | msg = HLS segment info | index =  10000
showVideoScreen | msg = Playback paused. | index =  0

I do value this help