Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| MID Profile
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

## Package javax.microedition.rms

The Mobile Information Device Profile provides a mechanism for MIDlets to persistently store data and later retrieve it.

See:
Description

Interface Summary
RecordComparator | An interface defining a comparator which compares two records (in an implementation-defined manner) to see if they match or what their relative sort order is.
RecordEnumeration | A class representing a bidirectional record store Record enumerator.
RecordFilter | An interface defining a filter which examines a record to see if it matches (based on an application-defined criteria).
RecordListener | A listener interface for receiving Record Changed/Added/Deleted events from a record store.

Class Summary
RecordStore | A class representing a record store.

Exception Summary
InvalidRecordIDException | Thrown to indicate an operation could not be completed because the record ID was invalid.
RecordStoreException | Thrown to indicate a general exception occurred in a record store operation.
RecordStoreFullException | Thrown to indicate an operation could not be completed because the record store system storage is full.
RecordStoreNotFoundException | Thrown to indicate an operation could not be completed because the record store could not be found.
RecordStoreNotOpenException | Thrown to indicate that an operation was attempted on a closed record store.

## Package javax.microedition.rms Description

The Mobile Information Device Profile provides a mechanism for MIDlets to persistently store data and later retrieve it. This persistent storage mechanism is modeled after a simple record oriented database and is called the Record Management System.

Example:

The example uses the Record Management System to store and retrieve high scores for a game. In the example, high scores are stored in separate records, and sorted when necessary using a RecordEnumeration.

    import javax.microedition.rms.*;
    import java.io.DataOutputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.EOFException;

    /**
     * A class used for storing and showing game scores.
     */
    public class RMSGameScores
        implements RecordFilter, RecordComparator
    {
        /*
         * The RecordStore used for storing the game scores.
         */
        private RecordStore recordStore = null;

        /*
         * The player name to use when filtering.
         */
        public static String playerNameFilter = null;

        /*
         * Part of the RecordFilter interface.
         */
        public boolean matches(byte[] candidate)
    	throws IllegalArgumentException
        {
    	// If no filter set, nothing can match it.
    	if (this.playerNameFilter == null) {
    	    return false;
    	}

    	ByteArrayInputStream bais = new ByteArrayInputStream(candidate);
    	DataInputStream inputStream = new DataInputStream(bais);
    	String name = null;

    	try {
    	    int score = inputStream.readInt();
    	    name = inputStream.readUTF();
    	}
    	catch (EOFException eofe) {
    	    System.out.println(eofe);
    	    eofe.printStackTrace();
    	}
    	catch (IOException eofe) {
    	    System.out.println(eofe);
    	    eofe.printStackTrace();
    	}
    	return (this.playerNameFilter.equals(name));
        }

        /*
         * Part of the RecordComparator interface.
         */
        public int compare(byte[] rec1, byte[] rec2)
        {
    	// Construct DataInputStreams for extracting the scores from
    	// the records.
    	ByteArrayInputStream bais1 = new ByteArrayInputStream(rec1);
    	DataInputStream inputStream1 = new DataInputStream(bais1);
    	ByteArrayInputStream bais2 = new ByteArrayInputStream(rec2);
    	DataInputStream inputStream2 = new DataInputStream(bais2);
    	int score1 = 0;
    	int score2 = 0;
    	try {
    	    // Extract the scores.
    	    score1 = inputStream1.readInt();
    	    score2 = inputStream2.readInt();
    	}
    	catch (EOFException eofe) {
    	    System.out.println(eofe);
    	    eofe.printStackTrace();
    	}
    	catch (IOException eofe) {
    	    System.out.println(eofe);
    	    eofe.printStackTrace();
    	}

    	// Sort by score
    	if (score1 < score2) {
    	    return RecordComparator.PRECEDES;
    	}
    	else if (score1 > score2) {
    	    return RecordComparator.FOLLOWS;
    	}
    	else {
    	    return RecordComparator.EQUIVALENT;
    	}
        }

        /**
         * The constuctor opens the underlying record store,
         * creating it if necessary.
         */
        public RMSGameScores()
        {
    	//
    	// Create a new record store for this example
    	//
    	try {
    	    recordStore = RecordStore.openRecordStore("scores", true);
    	}
    	catch (RecordStoreException rse) {
    	    System.out.println(rse);
    	    rse.printStackTrace();
    	}
        }

        /**
         * Add a new score to the storage.
         *
         * @param score the score to store.
         * @param playerName the name of the play achieving this score.
         */
        public void addScore(int score, String playerName)
        {
    	//
    	// Each score is stored in a separate record, formatted with
    	// the score, followed by the player name.
    	//
    	ByteArrayOutputStream baos = new ByteArrayOutputStream();
    	DataOutputStream outputStream = new DataOutputStream(baos);
    	try {
    	    // Push the score into a byte array.
    	    outputStream.writeInt(score);
    	    // Then push the player name.
    	    outputStream.writeUTF(playerName);
    	}
    	catch (IOException ioe) {
    	    System.out.println(ioe);
    	    ioe.printStackTrace();
    	}

    	// Extract the byte array
    	byte[] b = baos.toByteArray();
    	// Add it to the record store
    	try {
    	    recordStore.addRecord(b, 0, b.length);
    	}
    	catch (RecordStoreException rse) {
    	    System.out.println(rse);
    	    rse.printStackTrace();
    	}
        }

        /**
         * A helper method for the printScores methods.
         */
        private void printScoresHelper(RecordEnumeration re)
        {
    	try {
    	    while(re.hasNextElement()) {
    		int id = re.nextRecordIndex();
    		ByteArrayInputStream bais = new ByteArrayInputStream(recordStore.getRecord(id));
    		DataInputStream inputStream = new DataInputStream(bais);
    		try {
    		    int score = inputStream.readInt();
    		    String playerName = inputStream.readUTF();
    		    System.out.println(playerName + " = " + score);
    		}
    		catch (EOFException eofe) {
    		    System.out.println(eofe);
    		    eofe.printStackTrace();
    		}
    	    }
    	}
    	catch (RecordStoreException rse) {
    	    System.out.println(rse);
    	    rse.printStackTrace();
    	}
    	catch (IOException ioe) {
    	    System.out.println(ioe);
    	    ioe.printStackTrace();
    	}
        }

        /**
         * This method prints all of the scores sorted by game score.
         */
        public void printScores()
        {
    	try {
    	    // Enumerate the records using the comparator implemented
    	    // above to sort by game score.
    	    RecordEnumeration re = recordStore.enumerateRecords(null, this,
    								true);
    	    printScoresHelper(re);
    	}
    	catch (RecordStoreException rse) {
    	    System.out.println(rse);
    	    rse.printStackTrace();
    	}
        }

        /**
         * This method prints all of the scores for a given player,
         * sorted by game score.
         */
        public void printScores(String playerName)
        {
    	try {
    	    // Enumerate the records using the comparator and filter
    	    // implemented above to sort by game score.
    	    RecordEnumeration re = recordStore.enumerateRecords(this, this,
    								true);
    	    printScoresHelper(re);
    	}
    	catch (RecordStoreException rse) {
    	    System.out.println(rse);
    	    rse.printStackTrace();
    	}
        }

        public static void main(String[] args)
        {
    	RMSGameScores rmsgs = new RMSGameScores();
    	rmsgs.addScore(100, "Alice");
    	rmsgs.addScore(120, "Bill");
    	rmsgs.addScore(80, "Candice");
    	rmsgs.addScore(40, "Dean");
    	rmsgs.addScore(200, "Ethel");
    	rmsgs.addScore(110, "Farnsworth");
    	rmsgs.addScore(220, "Farnsworth");
    	System.out.println("All scores");
    	rmsgs.printScores();
    	System.out.println("Farnsworth's scores");
    	RMSGameScores.playerNameFilter = "Farnsworth";
    	rmsgs.printScores("Farnsworth");
        }
    }

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| MID Profile
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

Submit a comment or suggestion Version 0.95 of MID Profile Specification
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries. Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,Palo Alto, California, 94303, U.S.A. All Rights Reserved.