ib_beat
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2017
06:38 AM
Communicating with Web Service issue
So, I'm new in the whole Brightscript/Roku development environment and I'm having an issue with a request of a webservice. For ease, I made a function in the main.brs that I can call from other scripts that basically creates a roUrlTransfer object, gets the contents of the url in a variable and returns it. Here's the code:
The same code (kinda) is already used successfully in the same main.brs file that has another purpose, but the same 3 lines are used.
However, when I call this function I get this error here:
Any ideas?
Function vGetUrlContent(p_url As String)
url = CreateObject("roUrlTransfer")
url.SetUrl(p_url)
html = url.GetToString()
Return html
End Function
The same code (kinda) is already used successfully in the same main.brs file that has another purpose, but the same 3 lines are used.
However, when I call this function I get this error here:
BRIGHTSCRIPT: ERROR: roUrlTransfer: creating MAIN|TASK-only component failed on RENDER thread: pkg:/source/main.brs(306)
BrightScript Micro Debugger.
Enter any BrightScript statement, debug commands, or HELP.
Suspending threads...
Thread selected: 1* pkg:/source/main.brs(307) url.SetUrl(p_url)
Current Function:
305: Function vGetUrlContent(p_url As String)
306: url = CreateObject("roUrlTransfer")
307:* url.SetUrl(p_url)
308: html = url.GetToString()
309: Return html
310: End Function
'Dot' Operator attempted with invalid BrightScript Component or interface reference. (runtime error &hec) in pkg:/source/main.brs(307)
307: url.SetUrl(p_url)
Backtrace:
#1 Function vgeturlcontent(p_url As String) As Dynamic
file/line: pkg:/source/main.brs(307)
#0 Function onitemselected() As Void
file/line: pkg:/components/screens/DetailsScreen/DetailsScreen.brs(84)
Local Variables:
p_url roString (2.1 was String) refcnt=1 val:"(HERE IS THE ACTUAL WEBSERVICE URL)"
global Interface:ifGlobal
m roAssociativeArray refcnt=3 count:6
url Invalid
html <uninitialized>
Threads:
ID Location Source Code
0 pkg:/source/main.brs(80) msg = wait(0, port)
1* pkg:/source/main.brs(307) url.SetUrl(p_url)
*selected
Brightscript Debugger>
Any ideas?
3 REPLIES 3
joetesta
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2017
07:27 AM
Re: Communicating with Web Service issue
you can't do http requests from render thread.
https://sdkdocs.roku.com/display/sdkdoc/Task
https://sdkdocs.roku.com/display/sdkdoc/Task
aspiring
ib_beat
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2017
07:31 AM
Re: Communicating with Web Service issue
How can I get around that if I have to call an http request from a render thread, if I can't call a main.brs function that does it for me?
tim_beynart
Channel Surfer
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2017
08:58 AM
Re: Communicating with Web Service issue
you create an instance of your task in the render thread logic, then run it.
for example, you could write a task called "http_request"
in the code for a screen (which is in the render thread), you do something like this:
for example, you could write a task called "http_request"
in the code for a screen (which is in the render thread), you do something like this:
task = CreateObject("roSGNode", "http_request")
task.observeField("response","someFunctionThatHandlesResponses")
task.url = url
task.control = "RUN"