Muestra de código: recuperar una página Web mediante el API de red

Para hacer esta muestra de código tan genérica como sea posible, se usan las interfaces de InputConnection y OutputConnection en lugar de la de HttpConnection.

import net.rim.device.api.io.transport.*;
import net.rim.device.api.io.transport.options.*;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.util.Arrays;
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 
{
    ConnectionFactory _factory = new ConnectionFactory();
    public HTTPConnectionSetup() 
    {
        // Create preference ordered list of transports
        int[] _intTransports =
        { TransportInfo.TRANSPORT_TCP_WIFI,
          TransportInfo.TRANSPORT_WAP2,
          TransportInfo.TRANSPORT_TCP_CELLULAR
        };
        // Remove any transports that are not (currently) available
        for(int i = 0; i < _intTransports.length ; i++)
        {
            int transport = _intTransports[i];
            if(!TransportInfo.isTransportTypeAvailable(transport)
                  || !TransportInfo.hasSufficientCoverage(transport))
            {
                Arrays.removeAt(_intTransports, i);
            }
        }
        // Set options for TCP Cellular transport
        TcpCellularOptions tcpOptions = new TcpCellularOptions();
        if(!TcpCellularOptions.isDefaultAPNSet())
        {
            tcpOptions.setApn("My APN");
            tcpOptions.setTunnelAuthUsername("user");
            tcpOptions.setTunnelAuthPassword("password");
        }
        // Set ConnectionFactory options
        if(_intTransports.length > 0)
        {
            _factory.setPreferredTransportTypes(_intTransports);
        }
        _factory.setTransportTypeOptions(TransportInfo.TRANSPORT_TCP_CELLULAR, 
                                                       tcpOptions);
        _factory.setAttemptsLimit(5);
        // Open a connection on a new thread
        Thread t = new Thread(new Runnable()
        {
            public void run()
            {
                ConnectionDescriptor cd = _factory.getConnection
                    ("http://www.blackberry.com");
                // If connection was successful, fetch and show the content from 
                // the web server
                if(cd != null) 
                {
                    Connection c = cd.getConnection();
                    displayContent(c);
                }
             }
        });
        t.start();
    }
    private void displayContent(final Connection conn) 
    {
        // 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(conn));
            }
        });
    }
}
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);
        }
    }
}


¿Le ha resultado útil esta información? Envíenos sus comentarios.