Code sample: Retrieving a web page using the GCF

This code sample uses the BlackBerry® Mobile Data System transport. To make this code sample as generic as possible, the InputConnection and OutputConnection interfaces are used in place of the HttpConnection interface.

import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.UiApplication;
import java.io.*;
import javax.microedition.io.*;


public class NetworkSample extends UiApplication 
{
    public static void main(String[] args) 
    {
        NetworkSample app = new NetworkSample();
        app.enterEventDispatcher();
    }
    public NetworkSample() {
        new HTTPConnectionSetup();
    }
}

class HTTPConnectionSetup 
{

    public HTTPConnectionSetup()
    {

        Thread t = new Thread(new Runnable()
        {

            public void run() {
                Connection c = null;
                try 
                {
                    c = Connector.open("http://www.blackberry.com;deviceside=false");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(c != null)
                {
                    displayContent(c);
                }
            }

        });
        t.start();
    }

    private void displayContent(final Connection c) {
        // When the connection thread completes, show the data from the web server
        UiApplication.getUiApplication().invokeLater(new Runnable()
        {
            public void run() {
                UiApplication.getUiApplication().pushScreen(new HTTPOutputScreen(c));
            }
        });
    }

}

class HTTPOutputScreen extends MainScreen 
{

    RichTextField _rtfOutput = new RichTextField();

    public HTTPOutputScreen(Connection conn)
    {
        // Create a container for the data, and put it on the screen
        _rtfOutput.setText("Retrieving data. Please wait...");
        add(_rtfOutput);
        // Retrieve the data from the web server, using the connection, on a 
        // separate thread
        ContentReaderThread t = new ContentReaderThread(conn);
        t.start();
    }

    // After the data has been retrieved, display it
    public void showContents(final String result) 
    {
        UiApplication.getUiApplication().invokeLater(new Runnable() 
        {

            public void run() 
            {
                _rtfOutput.setText(result);
            }
        });
    }

    private final class ContentReaderThread extends Thread
    {
        private Connection _connection;

        ContentReaderThread(Connection conn)
        {
            _connection = conn;
        }

        public void run()
        {
            String result = "";
            OutputStream os = null;
            InputStream is = null;

            try
            {
                // Send HTTP GET to the server
                OutputConnection outputConn = (OutputConnection) _connection;
                os = outputConn.openOutputStream();
                String getCommand = "GET " + "/" + " HTTP/1.0\r\n\r\n";
                os.write(getCommand.getBytes());
                os.flush();

                // Get InputConnection and read the server's response
                InputConnection inputConn = (InputConnection) _connection;
                is = inputConn.openInputStream();
                byte[] data = net.rim.device.api.io.IOUtilities.streamToBytes(is);
                result = new String(data);
                // is.close();

            }
            catch(Exception e)
            {
                result = "ERROR fetching content: " + e.toString();
            }
            finally
            {
                // Close OutputStream
                if(os != null)
                {
                    try
                    {
                        os.close();
                    }
                    catch(IOException e)
                    {
                    }
                }

                // Close InputStream
                if(is != null)
                {
                    try
                    {
                        is.close();
                    }
                    catch(IOException e)
                    {
                    }
                }

                // Close Connection
                try
                {
                    _connection.close();
                }
                catch(IOException ioe)
                {
                }
            }

            // Show the response received from the web server, or an error message
            showContents(result);
        }
    }


}
Next topic: Communication API

Was this information helpful? Send us your comments.