User Tools

Site Tools


sample_code:sample_xmlhttprequest

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sample_code:sample_xmlhttprequest [2014/12/22 00:45]
170.178.251.101 created
sample_code:sample_xmlhttprequest [2014/12/22 10:08] (current)
Line 1: Line 1:
 Sample program that demonstrates how to use XMLHttpRequest POST and GET. The example is a simple roku remote app i wrote for younger kids to use. Sample program that demonstrates how to use XMLHttpRequest POST and GET. The example is a simple roku remote app i wrote for younger kids to use.
 +
 +====== XMLHttpRequest Example ======
 +
 +<file java kidsroku.js>
 +//Called when application is started.
 +function OnStart()
 +{
 +     //keep in portrait orientation
 +     app.SetOrientation("Portrait");
 +
 +//Check if roku.pref exists
 +existsFile = app.FileExists( "/sdcard/kidsroku/roku.pref" );
 +
 +//check for for file existance
 +if (existsFile == 0) 
 +{
 + //create folder for preferences
 + app.MakeFolder( "/sdcard/kidsroku/" );
 + //default value
 + address = "http://172.16.20.84:8060/";
 + //write preference file
 + app.WriteFile( "/sdcard/kidsroku/roku.pref", address );
 +}
 +
 +// read file roku.pref
 +address = app.ReadFile("/sdcard/kidsroku/roku.pref");
 +
 +    //Create a layout with objects vertically centered.
 +    lay = app.CreateLayout( "Linear", "VCenter,FillXY" );    
 +    //set background 
 +    lay.SetBackground( "/Sys/Img/BlackBack.png" ); 
 +
 +    //Create a layout we can slide over the main layout. 
 +    //(This hidden layout is actually on top of the main 
 +    //layout, it just appears to slide from the left) 
 +    laySlide = app.CreateLayout( "Linear", "FillXY" ); 
 +    laySlide.SetPadding( 0, 0.1, 0, 0 );  
 +    laySlide.SetBackground( "/Sys/Img/GreenBack.png" ); 
 +    laySlide.SetVisibility( "Hide" );
 +
 +    //Create Verticle sub-layout for buttons.
 +    layVert = app.CreateLayout( "Linear", "Verticle" );    
 +
 +    //Create Horizontal sub-layout for buttons
 +    layHori = app.CreateLayout("linear", "Horizontal");
 +    layVert.AddChild( layHori);
 +    
 +    //Create Home button.
 +    btnHome = app.CreateImage( "Img/home.png", .25, -1 );
 +    btnHome.SetMargins(.0,.01,.15,.08);
 +    btnHome.SetOnTouchDown( btnHome_OnTouch );
 +    layHori.AddChild( btnHome );
 +    
 +    //Create Back button.
 +    btnBack = app.CreateImage( "Img/back.png", .25, -1 );
 +    btnBack.SetMargins(.15,.01,.0,.08);
 +    btnBack.SetOnTouchDown( btnBack_OnTouch );
 +    layHori.AddChild( btnBack );
 +    
 +    //Create Up button.
 +    btnUp = app.CreateImage( "Img/up.png",.35,-1 );
 +    btnUp.SetOnTouchDown( btnUp_OnTouch );
 +    layVert.AddChild( btnUp );
 +    
 +    //Create horizontal layout2 for buttons
 +    layHori2 = app.CreateLayout("linear", "Horizontal");
 +    layVert.AddChild( layHori2);
 +    
 +    //Create Left button.
 +    btnLeft = app.CreateImage( "Img/left.png",.35,-1 );
 +    btnLeft.SetOnTouchDown( btnLeft_OnTouch );
 +    layHori2.AddChild( btnLeft );
 +    
 +    //Create Select button.
 +    btnSelect = app.CreateImage( "Img/select.png",.35,-1 );
 +    btnSelect.SetOnTouchDown( btnSelect_OnTouch );
 +    layHori2.AddChild( btnSelect );
 +    
 +    //Create Right button.l
 +    btnRight = app.CreateImage( "Img/right.png",.35,-1 );
 +    btnRight.SetOnTouchDown( btnRight_OnTouch );
 +    layHori2.AddChild( btnRight );
 +    
 +    //Create Down button.
 +    btnDown = app.CreateImage( "Img/down.png",.35,-1 );
 +    btnDown.SetOnTouchDown( btnDown_OnTouch );
 +    layVert.AddChild( btnDown );
 +    
 +    //Create horizontal layout3 for buttons
 +    layHori3 = app.CreateLayout("linear", "Horizontal");
 +    layVert.AddChild( layHori3);
 +   
 +    //Create button and add to main layout. 
 +    btnSave = app.CreateButton( "Save", 0.3, 0.06, "gray" ); 
 +    btnSave.SetOnTouch( btnSave_OnTouch ); 
 +    laySlide.AddChild( btnSave );
 +
 +    //Create menu
 +    app.SetMenu("IP Address,Find Roku,Help");
 +
 +    //Create text edit
 +    newAddress = app.CreateTextEdit( address, 0.8, 0.3 ); 
 +    laySlide.AddChild( newAddress );
 +
 +    //Add verticle layout to main layout.
 +    lay.AddChild( layVert );
 +    
 +    //Add layout to app.    
 +    app.AddLayout( lay );
 +    app.AddLayout(laySlide);
 +
 +}
 +
 + //webscript post
 +function webscript_post()
 +{
 +    xhr = new XMLHttpRequest();
 +    xhr.open('POST', address + command,true);
 +    xhr.timeout = setTimeout("xhr.abort()", 300);
 +    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
 +    xhr.send(null);
 +    app.Vibrate( "0,20" );
 +
 +}
 +
 +//Called when user touches Home button.
 +function btnHome_OnTouch()
 +{
 +command = 'keypress/home'
 +webscript_post()
 +}
 +
 +//Called when user touches Back button.
 +function btnBack_OnTouch()
 +
 +command = 'keypress/back'
 +webscript_post()
 +}
 +
 +//Called when user touches up button.
 +function btnUp_OnTouch()
 +{
 +command = 'keypress/up'
 +webscript_post()
 +}
 +
 +//Called when user touches Left button.
 +function btnLeft_OnTouch()
 +{
 +command = 'keypress/left'
 +webscript_post()
 +}
 +
 +//Called when user touches Select button.
 +function btnSelect_OnTouch()
 +{
 +command = 'keypress/select'
 +webscript_post()
 +}
 +
 +//Called when user touches Right button.
 +function btnRight_OnTouch()
 +{
 +command = 'keypress/right'
 +webscript_post()
 +}
 +
 +//Called when user touches Down button.
 +function btnDown_OnTouch()
 +{
 +command = 'keypress/down'
 +webscript_post()      
 +
 +
 +//Called when user touches IP Adress menu item.
 +function btnIpAddress_OnTouch()
 +{
 +laySlide.Animate( "SlideFromLeft" );
 +
 +    app.Alert( "http://172.16.20.56:8060/", "make sure to use this format " );
 +}
 +
 +//Called when user touches Find Roku menu item
 +function btnFindRoku_OnTouch()
 +{
 +   findRoku()
 +}
 +
 +//help
 +function help() {
 +   app.Alert("A simple roku remote for kids or anyone looking for a basic easy to use remote");
 +}
 +
 +//Called when user touches menu item Ip button
 +function OnMenu(item)
 +{
 +if (item == "IP Address") {
 +    btnIpAddress_OnTouch()
 +}
 +
 +// Called when user touches menu item Find Roku
 +if (item=="Find Roku") {
 +    btnFindRoku_OnTouch()
 +}
 +if (item=="Help") {
 +   help()
 +}
 +}
 +
 +//Called when user touches save button
 +function btnSave_OnTouch()
 +{
 +laySlide.Animate( "SlideToLeft" );
 +address = newAddress.GetText();
 +app.WriteFile( "/sdcard/kidsroku/roku.pref", address );
 +
 +}
 + 
 +// *****************************************************
 +
 +//Search network for roku
 +function findRoku() 
 +
 +
 +//Get ip of device
 +    ip = app.GetIPAddress();
 +    startNum = ip.split (".");
 +    ipEndd = Math.floor(startNum[3]/50);
 +    ipEnd = ipEndd * 50+1
 +
 +//Create a layout with objects vertically centered. 
 +    lay_findRoku = app.CreateLayout( "linear", "VCenter,FillXY" );
 +
 +//Create a button to send request. 
 +    btn = app.CreateButton( "Find Roku", 0.9, 0.1 );  
 +    btn.SetMargins( 0, 0, 0, 0 );  
 +    btn.SetOnTouch( btn_OnTouch );  
 +    lay_findRoku.AddChild( btn );  
 +
 +//Create a text label to show results. 
 +    txt = app.CreateText( "", 0.9, 0.8, "Left,Multiline" )
 +    txt.SetBackColor( "#ff222222" );  
 +    txt.SetTextSize( 12 ); 
 +    lay_findRoku.AddChild( txt ); 
 +
 +// Create a button to cancel request
 +    btnCancel = app.CreateButton( "Cancel", 0.9, 0.1);
 +    btnCancel.SetMargins(0, 0, 0, 0);
 +    btnCancel.SetOnTouch( loadRemote );
 +    lay_findRoku.AddChild( btnCancel );
 +     
 +//Add layout to app.     
 +    app.AddLayout( lay_findRoku ); 
 +
 +}    
 +
 +//Load roku remote
 +function loadRemote()
 +{
 +app.RemoveLayout(lay_findRoku);
 +OnStart()
 +}
 +
 +//Handle button press. 
 +function btn_OnTouch()  
 +{  
 +
 +//find device
 +  ipArray = ip.split (".");
 +  ipBase = (ipArray[0] + "." + ipArray[1] + "." + ipArray[2] + ".");
 +  ipBase += ipEnd;
 +  ipBase += ":8060/"
 +  txt.SetText( "Checking..." + ipBase);
 +  
 +//Send request to roku
 +  url = "http://" + ipBase + "/query/apps";
 +  SendRequest( url  ); 
 +
 +
 +//Send an http get request. 
 +function SendRequest( url ) 
 +
 +    httpRequest = new XMLHttpRequest();    
 +    httpRequest.open("GET", url, true); 
 +    httpRequest.onreadystatechange = function() { HandleReply(httpRequest); };
 +     httpRequest.send(null);   
 +}
 +
 +//Handle the roku's reply
 +function HandleReply( httpRequest ) 
 +
 +   if( httpRequest.readyState==4 ) 
 +    { 
 +        //If we got a valid response. 
 +        if( httpRequest.status==200 ) 
 +        { 
 +   resTxt = httpRequest.responseText;
 +
 +//split returned xml
 +   split1 = resTxt.split('"');
 +   split2 = resTxt.split('>');
 +
 +//get length of array split1
 +split1Length = split1.length
 +
 +//get length of array split2
 +split2Length = split2.length
 +
 +//build array of id's
 +   y = 0
 +   idArray = ["0"]
 +for(z=1; z<split1Length; z=z+4)
 +   {
 +   idArray[y] = split1[z]
 +   y++
 +   }
 +
 +//build array of channels
 +w = 0
 +chanArray = ["0"]
 +for(x=2; x<split2Length; x=x+2)
 +{
 +chanArray[w] = split2[x]
 +w++
 +}
 +
 +//trim array for channels
 +split3Length = chanArray.length
 +channels =""
 +for(v=0; v<split3Length; v++)
 +   {
 +   channels = channels + chanArray[v];
 +   }
 +
 +//split xml
 +split4 = channels.split('</app');
 +split4Length = split4.length
 +t = 0
 +channelsArray = ["0"]
 +for(s=0; s<split4Length; s++)
 +   {
 +   channelsArray[t] = split4[s]
 +   t++
 +   }
 +
 +//view channels
 +display ="Configuration Update Sucessful\n\nRoku IP:" +  ipBase + "\n\nYour Channels:\n\n"
 +channelsLength = channelsArray.length
 +for(s=0; s<channelsArray.length; s++)
 +   {
 +   display = display + channelsArray[s] + "\n"
 +   }
 +
 +//set text
 +txt.SetText(display);
 +
 +//write ip
 +writeFile();
 +
 +//Load Roku Remote
 +setTimeout("loadRemote()", 3000);
 +
 +        } 
 +   //An error occurred 
 +   else 
 +   {
 +            txt.SetText( "Error: " + httpRequest.status + httpRequest.responseText); 
 +    
 +  ipEnd++
 +  if (ipEnd > 254)
 +  {ipEnd = 1}
 +  setTimeout("btn_OnTouch()", 250);
 +}
 +}
 +
 +//write file for ip address
 +function writeFile()
 +{
 +app.WriteFile( "/sdcard/kidsroku/roku.pref", "http://" + ipBase );
 +  app.Vibrate( "0,100,30,100,50,300" );
 +}
 +
 +
 +</file>
 +
 +This script uses .png files as buttons that will need to created or modified to use standard buttons...I tried to upload but don't have the permissions to upload images.
sample_code/sample_xmlhttprequest.1419209100.txt.gz · Last modified: 2014/12/22 08:45 (external edit)