Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.


Channels ▼
RSS

Mobile

Flash Lite: Graphics for Mobile Devices


Preparing the Data Service

Unless you use an existing data service, you need to set up a server on the Internet to provide data to your application.

Again, the simplest solution is to send a text file composed of name-value pairs as a response to the HTTP request coming from the Flash Lite application. The file can be a static file, but you can create more compelling applications using data from, say, a MySQL database. The format for this text file is "<name>=<value>&" where the ampersand (&) separates one name-value pair from the next pair.

When a Flash Lite application receives a response containing a list of name-value pairs, it stores that data by creating variables called "name" containing the "value" as their value. The Flash Lite LoadVariables() method lets you point out the object where the data is to be stored. This loose encapsulation helps keep the application manageable.

In my example, all that's needed on the server side is a PHP script, which retrieves the requested data from the SQL server, then properly formats it. Listing Two publishes yearly top-five salary and homerun lists as name-value pairs from a SQL server. The data in this example is imported from www.baseball-databank.org. The database is huge, but we are using just a small subset of the information in it.

<?php
// create the SQL query based on query type and the year
// there is a hardcoded 5 row limit (returning only top 5)
switch ($_GET["query"])
{
    case "homeruns":
        $sqlquery = "SELECT nameFirst, nameLast, 
            HR AS value FROM master, 
               batting WHERE master.playerID=batting.playerID 
                  AND batting.yearID= '" . $_GET["year"] . "'
                      ORDER BY HR DESC LIMIT 0,5";
        break;
    case "salaries":
        $sqlquery = "SELECT nameFirst, nameLast, ROUND(salary) AS
            value FROM master, salaries 
               WHERE master.playerID=salaries.playerID 
                  AND salaries.yearID= '" . $_GET["year"] . "' 
                      ORDER BY salary DESC LIMIT 0,5";
        break;
    default:
        die("Incorrect query requested");
}
// make the SQL connection ready
mysql_connect("<your mysql server address here>", 
  "<your mysql username here", "<your mysql password here>") or 
    die("Could not connect to database");
mysql_select_db("baseball") or
    die("Could not select database");
// make the SQL query
$result = mysql_query($sqlquery) or
    die("Could not complete query\n&noData=true&\n&loaded=true&");
// print out the resulting rows as name-value pairs, 
// limited with &-characters
$i = 1;
while ($row = mysql_fetch_array($result))
{
    echo "&name$i=" , $row["nameFirst"] , " " ,  $row["nameLast"] , 
         "&\n";
    echo "&value$i=" , $row["value"] , "&\n";
    $i++;    
}
// turn on the noData flag if result set was empty
if ($i == 1) 
    echo "&noData=true&\n";
// turn on the flag indicating that all data has been loaded
echo "&loaded=true&";
?>
Listing Two

The script adds one additional variable loaded at the end of the data. Since loading data over a cellular network can take a few seconds, the client should show a "loading data" page to the user. The solution here is to add an extra variable to the end of the data file, which is also updated on the client side. When this variable is set, the client knows all data has been received. If there are no results for the query, a noData variable is sent to the client, so that an empty results page is not shown to users.


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.