Рисунок 7.2.Пакет RMS определяет несколько исключений, связанных с доступом к хранилищу данных. Все исключения принадлежат пакету javax.microedition.rms, если не определено иное
Класс AddressBook предоставляет следующие методы, поддерживающие функции уровня приложения, выполняемые в хранилище данных:
void addRecord(String name, String phone)
void deleteAHReccrds ()
String ge-Scatistics ()
RecordEnumeration getAHRecords(String matchKey)
При реализации данного приложения на реальном устройстве необходимо обеспечение более полного набора методов для окончательной доработки этого интерфейса. Тем не менее, данный набор можно использовать с целью демонстрации понятий, связанных с использованием RMS MIDP.
Работа с данными byte []
Как уже упоминалось выше, приложение в этом примере работает с записями, которые содержат имя и номер телефона. Пользователь вводит как имена, так и телефонные номера как объекты String, поскольку экран ввода данных использует экземпляры класса TextField , описанный ранее в главе 5. Соответственно, метод addRecord () получает эти значения String и преобразует их в байты.
Так или иначе, эти значения должны быть преобразованы в один массив байтов перед добавлением в хранилище данных. Причина того, что вы должны выполнить это преобразование, заключается в том, что API RecordStore хранит записи только в виде однобайтового массива.
Метод addRecord () использует стандартную идиому ввода-вывода Java при создании DatalnputStream, который поддерживает запись встроенных типов Java в выходном потоке. Получающийся в результате байтовый массив затем добавляется в объект RecordStore .
Метод RecordStore.addRecord() возвращает int , которая представляет значение ID только что созданной записи. Ваше приложение может сохранить данный ID и использовать его при последующем извлечении записи. Но существует более интересный способ извлечения записей.
Cпиcки
Существует на самом деле два способа извлечения записей из хранилища данных:
— Извлечение отдельной записи с помощью ее уникального ID;
— Извлечение списка записей и выбор из них одной или нескольких нужных вам записей.
Чтобы извлечь определенную запись, вы можете использовать следующий метод класса RecordStore:
byte [] getRecord(int recordld)
Этот метод, очевидно, требует, чтобы вы знали уникальный ID записи, которую вы хотите извлечь. К сожалению, это означает, что вам, возможно, придется хранить ID где-нибудь в легкодоступном месте после того, как он будет выдан вам методом addRecord () . Это не всегда удобно или практично при большом количестве записей.
Самый легкий способ найти записи, которые вам нужны, — это использовать списки, которые поддерживаются классом RecordStore . Список весьма удобен при извлечении записей, если вы не знаете ID записей, которые вам нужны. Вы можете создать список записей, хранящихся в хранилище записей, а затем исследовать его, выбрав одну или несколько записей, которые вам нужны.
Класс RecordStore определяет метод
RecordEnumeration
enumerateRecords(RecordFilter filter,
RecordComparator comparator,
boolean keepUpdated)
который выдает список записей в хранилище записей. В листинге 7.2 показан исходный код RecordList.Java. Этот класс создает и отображает список всех записей адресной книги. Обратите внимание, что для того, чтобы извлекать записи, ID записей указывать не нужно.
Листинг 7.2.Списки дают вам возможность получать доступ к записям, не зная их идентификационных номеров (ID)
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import java.io.ByteArraylnputStream;
import Java.io.DatalnputStream; import Java.io.lOException;
/**
Этот класс является компонентом пользовательского интерфейса, отображающим список записей, находящихся в хранилище записей.
Он использует объект AddressBook, определенный классом MID-лета для данного приложения MID-лета.
@смотри AddressBook
@смотри AddressBookMain
*/
public class RecordList extends List
implements CommandListener
{
private static Command go =
new command("Go", Command.SCREEN, 1);
private static Command back =
new Command("Back", Command.BACK, 1);
private Display display;
private static RecordList instance;
/**
Конструктор.
@param title название экрана пользовательского интерфейса,
который является List.
Читать дальше