In questo CODE-IT creeremo una semplice MIDlet per la gestione degli impegni, utilizzando NetBeans 6.1 come IDE e le API standard MIDP 2.0 per la creazione dell'interfaccia. Una MIDlet è una applicazione Java particolare, in grado di essere eseguita all'interno di dispositivi con capacità limitate, come per esempio il cellulare. Per questo test abbiamo usato un Nokia E61i. Vediamo nel dettaglio come si usa NetBeans.
Con NETBEANS creiamo una nuova applicazione mobile (shot_01.png) che chiamiamo TaskManager e che imposteremo come applicazione principale (shot_02.png). Spuntiamo l'opzione che prevede la realizzazione della MIDlet di Hello. Il passo successivo è quello di definire il range di dispositivi in grado di eseguire la MIDlet. Come possiamo osservare le scelte riguardano quelle che si chiamano Configuration e Profile. Le prime vanno a definire requisiti hardware e software, le seconde l'insieme di API che avremo a disposizione (shot_03.png).
Ora procediamo alla creazione di una nuova MIDlet attraverso la pressione del tasto destro sulla cartella dei sorgenti. Bisogna scegliere una Visual MIDlet per sfruttare al meglio gli strumenti che NETBEAN ci mette a disposizione. Chiameremo questa MIDlet TaskApp (shot_05.png). Ciò che otteniamo è quindi una rappresentazione visuale della applicazione che andiamo a descrivere (shot_06.png). Come linea di principio utilizzeremo il NETBEANS per la definizione e la creazione dell'interfaccia lasciando ad una classe esterna quelli che sono gli aspetti di gestione dei dati.
La prima operazione che andremo a gestire sarà quella relativa all'inserimento di un nuovo Task. Per fare questo avremo bisogno di creare la schermata per l'inserimento delle informazioni la quale sarà riutilizzata anche nel caso di editazione. In generale il nostro modello sarà quindi rappresentato da un elenco dei Task presenti e dal task correntemente editato o visualizzato. Il primo sarà rappresentato da una variabile di tipo Vector mentre il secondo da una variabile di tipo TaskDAO.
// Contiene l'elenco dei task
private Vector tasks;
// Task correntemente in editazione/creazione
private TaskData currentTask;
Per l'inserimento della data inseriamo, allo stesso modo, un elemento di tipo DateField editandone le proprietà per quello che riguarda la label ed il nome della variabile (shot_19.png).
Se selezioniamo l'elemento creato con il pulsante destro e scegliamo l'opzione Go To Source vediamo come è stato creato automaticamente un metodo con quel nome all'interno del quale possiamo inserire del codice personalizzato (shot_27.png). Nel nostro caso non faremo altro che inizializzare l'elenco dei task ed utilizzare le informazioni così ottenute per la lista (shot_28.png).
tasks = TaskDAO.listTask();
taskList.deleteAll();
for(int i=0;i<tasks.size();i++){
TaskData td = (TaskData)tasks.elementAt(i);
taskList.append(td.name,null);
}
Nel caso della creazione di un nuovo Task dovremo creare un Entry Point di inizializzazione del task corrente che chiameremo initNewTask ed uno di sincronizzazione con i campi variabili che chiameremo setInputField unendoli come in figura (shot_29.png,shot_30.png)
// Inizializziamo il task corrente
currentTask = new TaskData();
// Valorizziamo i campi
taskName.setString(currentTask.name);
taskDate.setDate(currentTask.date);
taskInfo.setText(currentTask.info);
infoBox.setString(currentTask.info);
In compilazione del task, quello corrente verrà preso tra quelli elencati nella lista. Per fare questo creiamo un Entry Point che chiamiamo initEditTask e che si preoccupa di selezionare il task dall'elenco in base all'indice selezionato (shot_31.png). Il codice sarà quindi quello che ci permetterà di prendere dal Vector l'elemento corrispondente al valore selezionato nella lista (shot_32.png).
int selIndex = taskList.getSelectedIndex();
currentTask = (TaskData)tasks.elementAt(selIndex);
Per quello che riguarda la compilazione del Task, prima di gestirne il salvataggio, dobbiamo gestire il campo Info. Non dovremo quindi fare altro che creare un Entry Point di sincronizzazione tra il valore nella TextBox e quello del StringItem insieme al relativo campo del Task corrente. Creiamo quindi un infoEditTask (shot_33.png e shot_34.png)
// Sincronizziamo il modello
currentTask.info = infoBox.getString();
taskInfo.setText(infoBox.getString());
Da notare come la gestione del cancelCommand ritorni all'Entry Point setInputFields per la valorizzazione del campo di Info stesso nel caso fosse comunque stato modificato.
Penultimo passo è quello relativo al salvataggio del task in creazione o creazione. A tale scopo creiamo l'EntryPoint che chiamiamo saveTask il cui compito è quello di salvare, usando il TaskDAO, le informazioni del task nel DB locale. Notiamo come, dopo il salvataggio, si ritorni all'EntryPoint di valorizzazione dell'elenco dei task (shot_35.png, shot_36.png).
currentTask.name = taskName.getString();
currentTask.date = taskDate.getDate();
currentTask.info = infoBox.getString();
TaskDAO.saveOrUpdate(currentTask);
// Salviamo il task corrente
TaskDAO.saveOrUpdate(currentTask);
Nel pacchetto che troverete associato a questo video troverete l'elenco completo delle immagini che avete visto scorrere, la versione integrale del testo associato a ognuna delle immagini, il progetto per netbeans completo di sorgenti, i sotfware in una directory utile alla distribuzione per cellulari. Il software e' pronto per essere scaricato, personalizzato e utilizzato sui vostri cellulari. Per chi è interessanto, sul suo sito http://www.massimocarli.it potete trovare semplici manuali per realizzare le vostre midlet oltre che numerosi software java per pc e per cellulare.