Articoli Manifesto Tools Links Canali Libri Contatti ?
Linguaggi / Java / J2ME

Sviluppo di una semplice applicazione J2ME (seconda parte)

Abstract
Network Related Midlet e salvataggio su RMS.
Data di stesura: 11/05/2004
Data di pubblicazione: 07/06/2004
Ultima modifica: 04/04/2006
di Federico Paparoni Discuti sul forum   Stampa

Dopo aver iniziato a capire come funziona il mondo J2ME è interessante prendere confidenza con le risorse di cui disponiamo. Prima di tutto dobbiamo renderci conto di non avere a disposizione il linguaggio JAVA, ma un suo piccolo dialetto.

Quindi per iniziare a meglio addentrarci in questo intrigante mondo vediamo come sia possibile reperire informazioni tramite Network (package di interesse javax.microedition.io.*).

Immaginiamo di avere a disposizione un nostro applicativo server-side (magari un webservice, ma di questo parleremo ancora più avanti!) che quando lo richiamiamo tramite web ci restituisce le 5 ultime notizie del giorno.

Per accedere a delle risorse in J2ME abbiamo la classe Connector, che viene instanziata con l'url di interesse della risorsa, che non deve essere necessariamente http (ad esempio file:// se ci troviamo a programmare su Siemens, socket://, etc etc.).

Ma vediamo subito un pezzo di codice per capire meglio di cosa stiamo parlando:

  1. HttpConnection hc = null; 
  2. InputStream is    = null; 
  3. StringBuffer b; 
  4. String GET_URL    = "http://quelsito.it/notizie.php"; 
  5.  
  6. hc = (HttpConnection)Connector.open(GET_URL); 
  7. is = hc.openInputStream(); 
  8.  
  9. while ((char)(ch = is.read()) != -1) { 
  10.   b.append((char)ch); 
  11.   System.out.println((char)ch); 
  12.  
  13. s = new String(b.toString()); 

Vediamo in questo pezzo di codice come viene inizializzata la HttpConnection e viene costruito su di essa un InputStream dal quale si estraggono le informazioni che cercavamo.

In questo modo sia riusciti a connetterci al web, questo chiaramente su dispositivo reale è vincolato dalla effettiva connessione GPRS, che in una certa zona può esserci o meno. Provando questo codice sull'emulatore della SUN, se siamo connessi ad Internet, l'emulatore ci permetterà di vedere come la nostra applicazione davvero si comporta.

Il fatto che esista il costrutto socket:// vi fa intuire che sia possibile crearsi un proprio client magari per una qualsivoglia applicazione. Un esempio di ciò è una famosa midlet freeware muTelnet, implementazione J2ME di un client telnet. Per un completo elenco delle classi e delle funzionalità consiglio di andarvi a vedere le API riguardanti il package javax.microedition.io.*, che semplicemente riassume le interfacce disponibili per l'I/O in J2ME, interfacce che devono essere usate prima di tutto per fare il casting del Connector iniziale che crea la vera e propria "connessione" alla risorsa a cui vogliamo accedere.

Queste informazioni possono essere semplicemente visualizzate a schermo nel seguente modo

  1. Form aForm  = new Form("Ultime 5 notizie"); 
  2. aForm.append(s); //Appendo la stringa ottenuta prima 
  3. Display d   = Display.getDisplay(this); 
  4. d.setCurrent(aForm); 

Oppure possiamo pensare di memorizzare queste informazioni sul cellulare. Visto che le MIDlet vengono eseguite all'interno di un sandbox come le applet, non abbiamo accesso al "filesystem" del cellulare. Dobbiamo così ricorrere all'unico metodo che le API J2ME attualmente ci offrono per garantire la persistenza, ovvero RMS.

Questo sistema prevede la memorizzazione di informazioni come una lista concatenata, che noi possiamo scorrere e organizzare logicamente nella maniera a noi più consona: se dobbiamo avere a disposizione una sorta di rubrica telefonica memorizzeremo negli slot dispari il nome e in quelli pari il numero ad esempio.
I metodi di ricerca all'interno dell'RMS mi ricordano molto altri linguaggi di programmazione dove vai a lavorare byte a byte quindi in un primo momento per chi è abituato a programmare solo in Java potrebbe risultare ostici ma sono comunque di semplice utilizzo.
Il package che contiene le classi per l'RMS è javax.microedition.rms e viene supportato di default dalla versione MIDP 1.0 e CDLC 1.0.
L'unica classe di questo package è RecordStore che serve alla creazione/modifica/cancellazione del nostro RMS.
Con il metodi statici openRecordStore e deleteRecordStore creiamo il nostro RMS e lo cancelliamo.

  1. RecordStore recordStore = RecordStore.openRecordStore("prova", true); 
  2. RecordStore.deleteRecordStore(recordStore); 

Vediamo poi che tra le funzioni di maggiore utilità c'è getNumRecords() che ci restituisce il numero di record attualmente in uso nel nostro RMS (utile per scorrere il nostro RMS in un ciclo for).

Altre interessanti feature presenti nel package javax.microedition.rms sono le interfacce RecordListener, RecordComparator, RecordEnumeration e RecordFilter. La prima permette di aggiungere un listener che notifica alla midlet quando il nostro RMS subisce delle modifiche mentre le altre sono delle interfacce che permettono di definire dei metodi di ricerca e filtraggio all'interno del nostro RMS, anche se nella maggior parte dei casi conviene crearsi da soli dei metodi di ricerca ottimizzati per l'applicazione che dobbiamo sviluppare.

Informazioni sull'autore

Federico Paparoni, studente di Ingegneria Informatica, appassionato da anni di programmazione. Nutre profondo amore per tutta la documentazione che riesce a trovare online riguardante l'interesse del momento. Predilige la programmazione sfrenata (notte tempo!) in qualsivoglia linguaggio (se non lo conosce si impara tanto alla fine sono tutti uguali). Specializzato nel linguaggio Java, ultimamente collabora con la W-LAB srl per lo sviluppo di applicazioni su dispositivi mobili riguardanti VoiceXML e Bluetooth. Mantiene un server irc presso l'università insieme ad un gruppo di geek.

È possibile consultare l'elenco degli articoli scritti da Federico Paparoni.

Altri articoli sul tema Linguaggi / Java / J2ME.

Risorse

  1. Sviluppo di una semplice applicazione in J2ME (prima parte)
    http://www.siforge.org/articles/2004/05/04-j2me.html
  2. SUN Developer Network Technical Topics: Mobility
    http://developers.sun.com/techtopics/mobility/
  3. IBM developerWorks > Wireless | Java technology, J2ME record management store
    http://www-106.ibm.com/developerworks/library/wi-rms/
  4. MicroDevNet: Working With The RMS
    http://www.microjava.com/articles/techtalk/rms
Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.