Skip to main content

By clicking Submit, you agree to the developerWorks terms of use.

The first time you sign into developerWorks, a profile is created for you. Select information in your developerWorks profile is displayed to the public, but you may edit the information at any time. Your first name, last name (unless you choose to hide them), and display name will accompany the content that you post.

All information submitted is secure.

  • Close [x]

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerworks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

By clicking Submit, you agree to the developerWorks terms of use.

All information submitted is secure.

  • Close [x]

J2ME record management store

Add data storage capacities to your MIDlet apps

Return to article.


Listing 16. Phone appointment diary: complete listing

// Import section
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import javax.microedition.io.*;
import java.io.*;
import java.lang.*;

// A first MIDlet with simple text and a few commands. The 
//CommandListener
// allows MID application to respond to screen commands while the
// ItemStateListener keep track of input 
// items values being changed.
public class Appointment extends MIDlet
implements CommandListener, ItemStateListener {

  // Screen commands
  private Command exitCommand; 

  // Display a list of appointments already set in database
  private Command displayCommand; 

  // Set up a new appointment
  private Command setCommand;

  // Display the Delete screen where 
 //multiple appointments can be 
//selected for deletion
  private Command deleteCommand;

  // Save appointment in database
  private Command saveCommand;

  // Displays a menu of commands
  private Command menuCommand;

  // Delete selected appointments
  private Command delCommand;

  //The display for this MIDlet
  private Display display;

  // Input fields for setting name and date values for a new appointment 
  DateField apptDate;
  TextField apptField;
  private String apptName, apptTime;


  // User Interface of the application
  Form welcomeForm, menuForm, displayForm, setForm, deleteForm;

  // Record store designated for storage of appointment information
  RecordStore rs;

  // To allow selection of appointments for delete or view
  ChoiceGroup cg;
  ChoiceGroup list;
  
  // The vector contains a list of appointments selected for deletion
  java.util.Vector vector = new java.util.Vector();
  boolean deleted[];
  java.util.Vector delRecords = new java.util.Vector();
  
  
  
  // This will retrieve appointments in name - mm/dd/yyyy hh:mm AM_PM
 //form from record store
  public void getAppointments()
  {
     // Allows single selection
       list = new ChoiceGroup("Appointments", ChoiceGroup.EXCLUSIVE);
     // Allows multiple selections
     cg = new ChoiceGroup("Appointments",ChoiceGroup.MULTIPLE);
     String name;
     String at; 
            
            try
          {
       // Open a Record store
         rs = RecordStore.openRecordStore("MyAppointments",true);
          
// Display list of appointments already set.
// Ignore appointments which 
// have been deleted and marked with a '@' 
               for (int j=0;j<rs.getNumRecords();j++)
               {
                    at = new String("");
                    name = new String("");
                    byte b[] = rs.getRecord(j);
                    // The string will comply to a ####AAAA format
                    String str = new String(b,0,b.length);

                    System.out.println(str);
                    if (!(str.startsWith("@")))
                    {
                         for (int i=0;i<str.length();i++)
                         {
                   // Digits represent time information in total 
                   // number of seconds
                              if (Character.isDigit(str.charAt(i)))
                                   at += str.charAt(i);
                              else
                                   name += str.charAt(i);
                         
                         }
                    }
               
                    long time = 0;
                    String setAt = "";
                    if (!(at.trim().equals("")))
                    {
                         time = Long.parseLong(at);
// The time in seconds are converted to Date and 
// Calendar objects to display time of appointment in 
// user-desired format
 java.util.Date date = new java.util.Date(time);
 java.util.Calendar rightNow = java.util.Calendar.getInstance();
 rightNow.setTime(date);
String year = 
 String.valueOf(rightNow.get(java.util.Calendar.YEAR));
String month =
  String.valueOf(rightNow.get(java.util.Calendar.MONTH) + 1);
String day = 
 String.valueOf(rightNow.get(java.util.Calendar.DATE));
String am = "";
   if ( rightNow.get(java.util.Calendar.AM_PM) == 0)
       am = "PM";
       else if (rightNow.get(java.util.Calendar.AM_PM) == 1)
       am = "AM";
String hr = String.valueOf(rightNow.get(java.util.Calendar.HOUR));
String min = String.valueOf(rightNow.get(java.util.Calendar.MINUTE));
                         
setAt = name + "-" + month + "/" + day + "/" + year  
+ " " + hr  + ":" + min + " " + am;
             }
             else
                setAt = name;
                    
// A list of appointments are formed for display and cancel 
// purposes     
                list.append(setAt,null);
                cg.append(setAt,null);
                at = new String("");
                name = new String("");
              }
                    
               
               
          }
          catch (javax.microedition.rms.RecordStoreException exc)
          {
                    exc.printStackTrace();
          }
          catch (javax.microedition.rms.RecordStoreNotOpenException exc)
          {
          
          }
               
          catch (Exception exc)
          {
                    exc.printStackTrace();
               
          }
     
     }
     
     
     
     
  // UI elements are created and initialized
  public Appointment() {
  
       
  
         display = Display.getDisplay(this);
        exitCommand = 
         new Command("Exit", Command.SCREEN, 1);
         displayCommand = 
         new Command("View",Command.BACK, 1);
        setCommand = 
         new Command("Set",Command.BACK, 1);
       deleteCommand = 
         new Command("Cancel",Command.BACK, 1);
     saveCommand =
     new Command("Save",Command.SCREEN, 1);
     menuCommand =
     new Command("Options",Command.SCREEN, 1);
     delCommand =
     new Command("Delete",Command.SCREEN, 1);
     
   
  }

  // Start the MIDlet by creating the TextBox and 
  // associating the exit command and listener.
  public void startApp() {
  
  try
  {
       // The first screen of the application
     welcomeForm = new Form("Appointment");
          
     
     getAppointments();
          
     // If the list of appointments is empty, notify user
     if (list.size() == 0)
     {
          
   welcomeForm.append("No appointments are set. Follow Menu->Set");
   welcomeForm.addCommand(exitCommand);
   welcomeForm.addCommand(menuCommand);
   welcomeForm.setCommandListener(this);
   welcomeForm.setItemStateListener(this);
   display.setCurrent(welcomeForm);
     }
     // else display the list of appointments 
     else
     {
   welcomeForm.append(list);
   welcomeForm.addCommand(menuCommand);
   welcomeForm.setItemStateListener(this);
   welcomeForm.setCommandListener(this);
   display.setCurrent(welcomeForm);
     }
     
  menuForm = new Form("Options");
  menuForm.append("Select View to display appointments already set");
  menuForm.addCommand(displayCommand);
  menuForm.addCommand(setCommand);
  menuForm.addCommand(deleteCommand);
  menuForm.setCommandListener(this);
  menuForm.setItemStateListener(this);
     
 displayForm = new Form("View");
     
     
   
     
setForm = new Form("Set An Appointment");
apptField = new TextField("Name","", 10,0);
apptDate = new DateField("Set At", DateField.DATE_TIME);
setForm.append(apptField);
setForm.append(apptDate);
setForm.addCommand(saveCommand);
setForm.addCommand(menuCommand);
setForm.setCommandListener(this);
setForm.setItemStateListener(this);
     
     
     
deleteForm = new Form("Delete");
     
     
     
     
     
     
     
 }
 catch (Exception exc)
 {
      exc.printStackTrace();
 }
     
     
  }
  
 public  void itemStateChanged(Item item)
  {
    java.util.Date date;
// The date value is set to a variable when the DateField item 
//  is changed
    if (item == apptDate)
   {
         date = apptDate.getDate();
         apptTime = String.valueOf(date.getTime());
     }
 // The name of appointment is set to a variable when the 
//  name input field is changed
     if (item == apptField)
    {
        apptName = apptField.getString();
     }
          
 // If the ChoiceGroup item state on Delete form is changed, 
  it sets an array of 
//appointments selected for deletion
    if (item == cg)
    {
    cg.getSelectedFlags(deleted);
    }
          
          
    }

  // Pause is a no-op because there are no  background
  // activities or record stores to be closed.
  public void pauseApp() { }

  // Destroy must cleanup everything not handled 
  // by the garbage collector.
  // In this case there is nothing to cleanup.
  public void destroyApp(boolean unconditional) { }

 // Respond to commands. Here we are only  implementing
 // the exit command. In the exit command,  cleanup and
 // notify that the MIDlet has been destroyed.
  public void commandAction(
  Command c, Displayable s) {
     // Exit the application after closing the record store
    if (c == exitCommand) {
     try
     {
          rs.closeRecordStore();
           destroyApp(false);
           notifyDestroyed();
     }
     catch (Exception exc) {  exc.printStackTrace(); }
    }
     // Display the Set form screen which allows to create 
     // a new appointment
     if (c== setCommand) {
     
          display.setCurrent(setForm);
          
      
     }
     // Display a list of appointments
     if (c==displayCommand)
     {
          
          getAppointments();
          
          
     
          displayForm.append(list);
          displayForm.addCommand(exitCommand);
          displayForm.addCommand(menuCommand);
          displayForm.setCommandListener(this);
          displayForm.setItemStateListener(this);
          display.setCurrent(displayForm);
          
     
     }
     
     // When hit Cancel, a selectable list of appointments is 
     //displayed. It allows to select
// multiple appointments for purpose of deletion
     if (c==deleteCommand)
     {
          
          getAppointments();
          deleteForm.append(cg);
          deleted = new boolean[cg.size()];
          deleteForm.addCommand(delCommand);
          deleteForm.addCommand(menuCommand);
          deleteForm.setCommandListener(this);
          deleteForm.setItemStateListener(this);
          display.setCurrent(deleteForm);
     }
          
// When hit Menu, the menu form displays which provides 
//options of setting appointments and cancel
     if (c==menuCommand)
          display.setCurrent(menuForm);
     
// When hit Save, insert record into record store as stream of bytes     
     if (c==saveCommand)
     {
          try
          {
          
          String appt = apptName + " " + apptTime;
          byte bytes[] = appt.getBytes();
          rs.addRecord(bytes,0,bytes.length);
       
          }
          catch (Exception exc)
          {
               exc.printStackTrace();
          }
     
     }
     // Actually delete the set of selected appointments. 
//The selected appointments are 
// marked as invalid in the record store and are 
//not displayed later
     if (c==delCommand)
     {
          try
          {
          for (int m=0;m<deleted.length;m++)
          {
               boolean ifDeleted = deleted[m];
 // In case a record is deleted, store some invalid characters
               // that signify it is inactive
               if (ifDeleted)
               {
                    String deactive = "@";
                    byte b[] = deactive.getBytes();
                    rs.setRecord(m+1, b,0,b.length);
               }
          }
          }
          catch (Exception exc)
          {
               exc.printStackTrace();
          }
     
     }
     
      }
  
  
 

}

Return to article.