Mega Code Archive

 
Categories / Java / J2ME
 

Http MIDlet

/* J2ME in a Nutshell By Kim Topley ISBN: 0-596-00253-X */ import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class HttpMIDlet extends MIDlet                     implements CommandListener, Runnable {     private Display display;     private Form addressForm;     private Form connectForm;     private Form displayForm;     private TextField serverURL;     private StringItem messageLabel;     private StringItem errorLabel;     private Command okCommand;     private Command exitCommand;     private Command backCommand;     protected void startApp() throws MIDletStateChangeException {         if (display == null) {             initialize();             display.setCurrent(addressForm);         }     }     protected void pauseApp() {     }     protected void destroyApp(boolean unconditional)                         throws MIDletStateChangeException {     }     public void commandAction(Command cmd, Displayable d) {         if (cmd == okCommand) {             Thread t = new Thread(this);             t.start();             display.setCurrent(connectForm);         } else if (cmd == backCommand) {             display.setCurrent(addressForm);         } else if (cmd == exitCommand) {             try {                 destroyApp(true);             } catch (MIDletStateChangeException ex) {             }             notifyDestroyed();         }     }     public void run() {         InputStream is = null;         HttpConnection conn = null;         try {             String url = serverURL.getString();             if (!url.startsWith("http://") &&        !url.startsWith("https://")) {                 url = "http://" + url;             }             conn = (HttpConnection)Connector.open(url, Connector.READ_WRITE);         } catch (Exception ex) {     System.out.println(ex);     ex.printStackTrace();             Alert alert = new Alert("Invalid Address",                         "The supplied address is invalid\n" +                         "Please correct it and try again.", null,                         AlertType.ERROR);             alert.setTimeout(Alert.FOREVER);             display.setCurrent(alert, addressForm);             return;         }         try {             // Fetch the required page, reading up             // to a maximum of 128 bytes             if (conn.getResponseCode() == HttpConnection.HTTP_OK) {                 is = conn.openInputStream();                 final int MAX_LENGTH = 128;                 byte[] buf = new byte[MAX_LENGTH];                 int total = 0;                 while (total < MAX_LENGTH) {                     int count = is.read(buf, total, MAX_LENGTH - total);                     if (count < 0) {                         break;                     }                     total += count;                 }                 is.close();                 String reply = new String(buf, 0, total);                 messageLabel.setText(reply);             } else {                 messageLabel.setText("Failed: error " + conn.getResponseCode() +                                 "\n" + conn.getResponseMessage());             }                          // Get the response code and print all the headers             System.out.println("Response code = " + conn.getResponseCode());             System.out.println("Response message = " + conn.getResponseMessage());             for (int i = 0; ; i++) {                 String key = conn.getHeaderFieldKey(i);                 String value = conn.getHeaderField(i);                 if (key == null) {                     // Reached last header                     break;                 }                 System.out.println(key + " = " + value);             }             conn.close();             display.setCurrent(displayForm);         } catch (IOException ex) {     System.out.println(ex);     ex.printStackTrace();             Alert alert = new Alert("I/O Error",                         "An error occurred while communicating with the server.",                         null, AlertType.ERROR);             alert.setTimeout(Alert.FOREVER);             display.setCurrent(alert, addressForm);             return;         } finally {             // Close open streams            try {                 if (is != null) {                     is.close();                     is = null;                 }             } catch (IOException ex1) {             }             try {                 if (conn != null) {                     conn.close();                     conn = null;                 }             } catch (IOException ex1) {             }         }     }     private void initialize() {         display = Display.getDisplay(this);         // Commands         exitCommand = new Command("Exit", Command.EXIT, 0);         okCommand = new Command("OK", Command.OK, 0);         backCommand = new Command("Back", Command.BACK, 0);         // The address form         addressForm = new Form("HTTP Client");         serverURL = new TextField("URL:", "", 256, TextField.ANY);         addressForm.append(serverURL);         addressForm.addCommand(okCommand);         addressForm.addCommand(exitCommand);         addressForm.setCommandListener(this);         // The connect form         connectForm = new Form("Connecting");         messageLabel = new StringItem(null, "Connecting...\nPlease wait.");         connectForm.append(messageLabel);         connectForm.addCommand(backCommand);         connectForm.setCommandListener(this);         // The display form         displayForm = new Form("Server Reply");         messageLabel = new StringItem(null, null);         displayForm.append(messageLabel);         displayForm.addCommand(backCommand);         displayForm.setCommandListener(this);     } }