21.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()-Methode, 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-Funktionen, die das System aufruft, wenn es die Java-Programme startet, anhält oder beendet.
|
21.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 (Highlevel-API). Das Display ist der Hauptschirm, das 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 = "Christian Ullenboom|Immengarten 6|30177 Hannover".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[] getPuffer = new byte[ 100 ]; int bytesRead = rs.getRecord( id, holen, 0 );
Die Daten stehen anschließend in unserem getPuffer und könnten wieder in den String konvertiert werden.