Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Так или иначе, эти значения должны быть преобразованы в один массив байтов перед добавлением в хранилище данных. Причина того, что вы должны выполнить это преобразование, заключается в том, что 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.

*/

public RecordList (String title)

superltitle, List.IMPLICIT);

instance = this;

PersistenceDemo pDemo = PersistenceDemo.getlnstance ;

display = Display.get-Display (pDemo);

addCommand(back); setCommandListener (this);

if (buildRecordList <= 0) setTitle("No records found");

}

/**

Возвращает один экземпляр данного класса.

Вызов этого метода перед созданием объекта возвращает нулевой указатель.

@возвращает экземпляр данного класса.

*/

public static RecordList getlnstance

}

return instance;

}

void display

{

display.setCurrent (this);

{

/**

Создает список записей, хранящихся в хранилище записей. Выдает число найденных записей. Этот метод извлекает все записи из хранилища записей, то есть он не использует фильтров для извлечения записей. Он также не использует компараторов записей, так что не упорядочивает выводимые записи.

Этот метод не сбрасывает исключений, но находит исключения, которые происходят при доступе к хранилищу записей.

(@возвращает число записей, найденных в хранилище записей, или 0, если записей не найдено.

*/

int buildRecordList

{

AddressBook addressBook =

AddressBookMain.get Instance!). getAddressBook;

RecordStore recordStore = addressBook.getRecordStore;

int numRecords = 0; try

RecordEnuraeration re;

re = recordStore.enumerateRecords(null,

null, false);

if (re.numRecords > 0)

{

ByteArraylnputStream bais = null;

DatalnputStreara dis = null;

String name = null;

while (re.hasNextElement)

byte [] record = re.nextRecord;

bais = new ByteArraylnputStream(record); dis = new DatalnputStrearn (bais);

String strRec = new String(record);

name = dis. readUTFO;

appendfname, null;

numRecords++;

)

)

else

}

Alert a = new Alert("No records",

"No records found in record store", null,

AlertType.CONFIRMATION); a.setTimeout(Alert.FOREVER);

display.setCurrent (a, AddressBookMain.get Instance );

})

catch (RecordStoreException re)

re.printStackTrace; Alert a = new Alert("Error retrieving record",

"Error retrieving record.", AlertType.CONFIRMATION);

a. setTimeout(Alert.FOREVER); display.setCurrent (a, this);

catch (lOException ioe)

}

ioe.printStackTrace;

}

finally

{

return numRecords;

{

public void coramandAction(Command c, Displayable d)

if (c == back)

AddressBookMain.getlnstancel). display ;

}

}

}

Метод buildRecordList использует составление списка для получения всех записей, хранящихся в хранилище записей, а затем извлекает поле имени каждой из них, чтобы создать список всех имен. Вызов enumerateRecords выдает RecordEnumeration, содержащий все записи. С помощью методов hasNextRecord и nextRecord цикл while просто извлекает имена из каждой записи и добавляет их в объект List для отображения.

Поделиться:
Популярные книги

Товарищ "Чума" 5

lanpirot
5. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 5

Страж Кодекса. Книга IX

Романов Илья Николаевич
9. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга IX

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Избранный. Книга 3

Маханенко Василий Михайлович
3. Избранный
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Избранный. Книга 3

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Болотник

Панченко Андрей Алексеевич
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Болотник

Истребитель. Ас из будущего

Корчевский Юрий Григорьевич
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Истребитель. Ас из будущего

Толян и его команда

Иванов Дмитрий
6. Девяностые
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Толян и его команда

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Блуждающие огни 4

Панченко Андрей Алексеевич
4. Блуждающие огни
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Блуждающие огни 4

Повелитель механического легиона. Том III

Лисицин Евгений
3. Повелитель механического легиона
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Повелитель механического легиона. Том III

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10