I am getting error in Home.brs , when I calling the service .Getting error at the line request.SetMessagePort(port)
Here is the error,
BRIGHTSCRIPT: ERROR: roUrlTransfer: creating MAIN|TASK-only component failed on RENDER thread: pkg:/components/Home/Home.brs(67)
BRIGHTSCRIPT: ERROR: roMessagePort: Trying to construct a message port on a non-plugin thread: pkg:/components/Home/Home.brs(68)
BrightScript Micro Debugger.
Enter any BrightScript statement, debug commands, or HELP.
Suspending threads...
Thread selected: 1* pkg:/components/Home/Home.brs(69) request.SetMessagePort(port)
Current Function:
065: Function getMenuItemsByGroup()
066: mplinkStatus = CreateObject("roDeviceInfo").GetLinkStatus()
067: request = CreateObject("roUrlTransfer")
068: port = CreateObject("roMessagePort")
069:* request.SetMessagePort(port)
070: request.SetRequest("GET")
071: request.SetUrl("URL")
072: if (request.AsyncGetToString())
073: while (true)
'Dot' Operator attempted with invalid BrightScript Component or interface reference. (runtime error &hec) in pkg:/components/Home/Home.brs(69)
069: request.SetMessagePort(port)
Backtrace:
#1 Function getmenuitemsbygroup() As Dynamic
file/line: pkg:/components/Home/Home.brs(69)
#0 Function init() As Dynamic
file/line: pkg:/components/Home/Home.brs(28)
Local Variables:
global Interface:ifGlobal
m roAssociativeArray refcnt=3 count:4
mplinkstatus Boolean val:true
request Invalid
port Invalid
msg <uninitialized>
code <uninitialized>
items <uninitialized>
json <uninitialized>
resultlist <uninitialized>
result <uninitialized>
resultitem <uninitialized>
event <uninitialized>
Threads:
ID Location Source Code
0 pkg:/source/main.brs(16) screen.show()
1* pkg:/components/Home/Home.brs(69) request.SetMessagePort(port)
*selected
Brightscript Debugger>
Thread detached
Thread detached
Please find the code,
Home.xml :
<?xml version="1.0" encoding="utf-8" ?>
<!--********** Copyright 2016 Roku Corp. All Rights Reserved. **********-->
<component name="Home" extends="Panel" >
<interface>
<field id="rowListContent" type="node" onchange="rowListContentChanged" />
</interface>
<script type="text/brightscript" uri="pkg:/components/Home/Home.brs"/>
<children>
<RowList id="theRowList"/>
<Poster id = "icon" />
</children>
</component>
Home.brs :
function init()
menuList = getMenuItemsByGroup()
for each menu in menuList
print "menu type is : ";menu.type
carouselList = getCarouselItemsByType(menu.type)
end for
end function
Function getMenuItemsByGroup()
mplinkStatus = CreateObject("roDeviceInfo").GetLinkStatus()
request = CreateObject("roUrlTransfer")
port = CreateObject("roMessagePort")
request.SetMessagePort(port)
request.SetRequest("GET")
request.SetUrl("URL")
if (request.AsyncGetToString())
while (true)
msg = wait(0, port)
if (type(msg) = "roUrlEvent")
code = msg.GetResponseCode()
if (code = 200)
items = CreateObject("roArray", 1, true)
json = ParseJSON(msg.GetString())
resultList = json.results
for each result in resultList
resultItem = {
title: result.title
type: result.name
noOfElements: result.pageSize
layoutType: result.layoutType
}
print "result item : ";resultItem
items.push(resultItem)
end for
return items
endif
else if (event = invalid)
request.AsyncCancel()
endif
end while
endif
return invalid
End Function
Function getCarouselItemsByType(carouselType) as object
mplinkStatus = CreateObject("roDeviceInfo").GetLinkStatus()
print "link status is :";mplinkStatus
if (not mplinkStatus) then
ShowMessageDialog("Alert","No network connection")
return invalid
end if
request = CreateObject("roUrlTransfer")
print "request is :";request
port = CreateObject("roMessagePort")
print "port is :";port
request.SetMessagePort(port)
request.SetRequest("GET")
request.SetUrl("URL")
if (request.AsyncGetToString())
while (true)
msg = wait(0, port)
if (type(msg) = "roUrlEvent")
code = msg.GetResponseCode()
if (code = 200)
items = CreateObject("roArray", 1, true)
print "items is :";items
json = ParseJSON(msg.GetString())
resultList = json.results
for each result in resultList
print "result is: ";result
images = CreateObject("roArray", 1, true)
imageItems = result.images.values
for each imageItem in imageItems
image ={
profile: imageItem.profile
type: imageItem.type
link: imageItem.link
}
print "image link is : "image.link;
images.push(image)
end for
print "images count ";images.Count()
resultItem = {
id: result._id
title: result.title
description: result.generalInfo.description
images: images
}
items.push(resultItem)
end for
return items
endif
else if (event = invalid)
request.AsyncCancel()
endif
end while
endif
return invalid
End Function