Midlet j2me: petición http
Ejemplo de un midlet que saca datos de la red, en concreto haciendo peticiones a una URL.
package hello;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.io.*;
/**
* @author luser
*/
public class HttpRequestTest extends MIDlet implements CommandListener {
private Command exitCommand, goCommand, backCommand;
private Display display;
private Form locationScreen;
private Form resultScreen;
private TextField urlField;
private StringItem itemResultado;
/**
* HttpRequestTest
* constructor
*/
public HttpRequestTest ()
{
// Pillamos la pantalla para el MIDlet
display = Display.getDisplay(this);
// Creamos comandos esenciales
exitCommand = new Command("Exit", Command.EXIT, 2);
goCommand = new Command("Go", Command.OK, 2);
backCommand = new Command("Back", Command.BACK, 2);
// Formulario para tomar la URL
locationScreen = new Form("Indica una URL destino");
urlField = new TextField("url", "http://localhost/Test.txt", 25, TextField.ANY);
locationScreen.append(urlField);
// Comandos salida y continuar
locationScreen.addCommand(exitCommand);
locationScreen.addCommand(goCommand);
locationScreen.setCommandListener(this);
// Creamos la pantalla de resultado
resultScreen = new Form("URL data:");
itemResultado = new StringItem("", "");
resultScreen.append(itemResultado);
// Metemos los comandos para volver
resultScreen.addCommand(backCommand);
resultScreen.setCommandListener(this);
}
/**
* startApp
* se ejecuta al inicio de la aplicación
*/
public void startApp() {
// Establecemos el formulario en la pantalla
display.setCurrent(locationScreen);
}
/**
* pauseApp
* se ejecuta en caso de pausar la aplicación
*/
public void pauseApp() {
}
/**
* destroyApp
* se ejecuta al terminar la aplicación
*/
public void destroyApp(boolean unconditional) {
}
/**
* commandAction
* captura los comandos.
*/
public void commandAction(Command c, Displayable s) {
String html = "";
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
else if (c == goCommand) {
// Llamamos a la función que saca los datos
html = getData(urlField.getString());
display.setCurrent(resultScreen);
itemResultado.setText(html);
}else if (c == backCommand) {
// Volvemos al inicio
display.setCurrent(locationScreen);
}
}
/**
* getData
* Solicita una URL y devuelve un String con el resultado
*/
private String getData(String url) {
StreamConnection conn = null;
InputStream in = null;
StringBuffer data = new StringBuffer();
try {
// Abrimos la conexión así de fácil
conn = (StreamConnection)Connector.open(url);
// Sacamos un InoutStream de la conexión
in = conn.openInputStream();
// Vamos leyendo caracteres y los metemos en un string
int ch;
while (((char)(ch = in.read()) != '\003') && (ch != -1) )
{
data.append((char)ch);
}
// Si está vacío, msg al canto con alert
if (data.toString().equals(""))
{
display.setCurrent(new Alert("Url","En esa URL no retornó nada.", null,AlertType.ERROR));
}
return data.toString();
} catch (IOException e) {
return "La conexión no se pudo establecer:" + e.getMessage();
}
}
}