22.5 Die Midlet-API 

In der Implementierung mit der Java ME und MIDP fällt eine gewisse Ähnlichkeit zu Applets auf, weshalb die Applikationen auch Midlets heißen. Midlets haben keine main()-Funktion, sondern erben wie Applets von einer (abstrakten) Oberklasse. Die Oberklasse ist bei Applets Applet und bei Midlets javax.microedition.midlet.MIDlet. Bei beiden gibt es Callback-Methoden, die das System aufruft, wenn es die Java-Programme startet, anhält oder beendet.
Hinweis Die API-Dokumentation liegt online unter http://java.sun.com/javame/ reference/apis.jsp vor. |
22.5.1 Paketstruktur Mobile Information Device Profile (2.0) 

Die Paketstruktur der Midlet-Klassen der Java ME ist relativ flach:
java.io |
Ein-/Ausgabeklassen wie InputStream, OutputStream |
java.lang |
Kernklassen wie String, Exceptions, Errors |
java.util |
Date, Timer und Datenstrukturen wie Vector |
javax.microedition.io |
Connection-Struktur |
javax.microedition.lcdui |
UI-API mit Alert, List, Ticker … |
javax.microedition.lcdui.game |
Game-API mit Layer, Sprite |
javax.microedition.media |
MIDP 2.0 Media API mit Player, Control |
javax.microedition.media.control |
ToneControl und VolumeControl der Media-API |
javax.microedition.midlet |
Nur Basisklasse MIDlet und Exception |
javax.microedition.pki |
Nur Certificate und Exception |
javax.microedition.rms |
Persistenz im Record Store |
Da MIDP 2.0 auf dem CLDC 1.0 aufsetzt, hat MIDP alle Typen aus CLDC. In CLDC 1.1 gibt es jedoch ein neues Paket java.lang.ref mit den Klassen Reference und WeakReference.
Analyse vom HelloMIDlet
HelloMIDlet nutzt mit TextBox eine Textkomponente der LCDUI-Bibliothek (High-Level-API). Das Display ist der Hauptschirm, der die Textkomponente darstellen soll. Ereignisse vom Gerät werden über Command-Objekte gesteuert. Der Konstruktor für Command nimmt eine Konstante für einen Schaltknopf an, ohne physikalisch genau festzulegen, wo dieser sitzt. An die Schaltfläche setzt setCommandListener() den Ereignisbehandler. Um die Anzahl der Klassen zu minimieren, implementieren Midlets-Klassen üblicherweise selbst den Listener, also CommandListener. Aus Speichergründen verzichten Entwickler gerne auf zu viele innere Klassen oder Extra-Klassen für jeden Listener.
Record Management System (RMS)
Mit dem Record Management System (RMS) lassen sich Daten in binären Tabellen speichern. Zentral ist der Typ RecordStore, mit dem Daten im RMS gespeichert und erfragt werden.
RecordStore rs = RecordStore.openRecordStore( "tutego", false );
Speichern wir zunächst eine Anschrift:
byte[] buffer = "Heinz Hutzelmann|Putzelweg 9|73003 Wutzelhausen".getBytes(); int id = rs.addRecord( buffer, 0, buffer.length );
Jeder Datensatz wird mit einer ID verbunden. Mit dieser ID können wir Daten wieder aus dem Speicher holen.
byte[] buffer2 = new byte[ 100 ]; int bytesRead = rs.getRecord( id, buffer2, 0 );
Die Daten stehen anschließend in buffer2 und könnten wieder in den String konvertiert werden. Die Methode getRecord() kopiert so viele Bytes in den Puffer wie nötig, wobei der Puffer natürlich selbst nicht seine Länge verändert. Wie viele Daten wirklich aus dem RMS stammen, sagt daher die Rückgabe von getRecord() aus.