XML является одним из наиболее часто используемых форматов обмена данными в сети. С распространением смартфонов стало распространенным требованием для анализа и отображения документов XML на мобильных устройствах. В этой статье я научу вас анализировать XML-документ в BlackBerry, а также отображать XML-документ в BlackBerry.
Установка подключаемого модуля BlackBerry Eclipse
Во-первых, нам нужно установить подключаемый модуль BlackBerry Java для Eclipse, который можно установить одним из следующих двух способов.
- С сайта обновления Java-модуля BlackBerry
- Из плагина .exe файл BlackBerry_JDE_PluginFull_1.5.0_helios.exe .
Мы обсудим каждый из этих методов в этом разделе. Для установки с сайта обновления выберите «Справка»> «Установить новое программное обеспечение в Eclipse Java IDE». В окне Install, нажмите Add под Доступным программным обеспечением . В окне « Добавить репозиторий» укажите « Имя как сайт обновления подключаемого модуля Java BlackBerry» и «Местоположение» как http://www.blackberry.com/go/eclipseUpdate/3.6/java, как показано на следующем рисунке.
Указание местоположения сайта обновления плагинов BlackBerry
Обновленный веб-сайт добавляется к Доступному программному обеспечению, и доступное программное обеспечение для веб-сайта перечисляется, включая различные версии. Выберите категорию подключаемого модуля BlackBerry Java версии 7.0.0.28 . Нажмите на Далее .
Выбор программного обеспечения для установки
В разделе « Сведения об установке » перечисляется BlackBerry Java SD 7.0.0.28. Нажмите на Далее .
BlackBerry Plugin Установить детали
Примите лицензионное соглашение и нажмите « Готово» . Откроется диалоговое окно « Установка программного обеспечения ». После установки программного обеспечения отобразится диалоговое окно с указанием требования перезагрузки. Нажмите на Перезагрузить сейчас . Установлен подключаемый модуль BlackBerry Java для Eclipse.
Во втором методе щелкните файл BlackBerry_JDE_PluginFull_1.5.0_helios.exe или исполняемый файл более ранней версии. Запускается мастер Java-модуля BlackBerry для Eclipse. Нажмите Next во введении .
Мастер BlackBerry Java Plug-in для Eclipse
Примите условия лицензии и нажмите Далее . В поле « Выберите папку установки» укажите каталог для установки плагина, включая Eclipse IDE. Нажмите на Далее .
Выбор установочной папки
В разделе «Выбрать дополнительные задачи» выберите стандартные ярлыки задач и нажмите « Далее» . В Сводке перед установкой нажмите Установить .
Установка подключаемого модуля BlackBerry
Установлен подключаемый модуль BlackBerry Java для Eclipse. Нажмите Готово . Далее нам нужно открыть перспективу BlackBerry. Выберите « Окно»> «Открыть проекцию»> «Другое» . В открытой перспективе выберите « Разработка приложений BlackBerry» и нажмите « ОК» .
Открытие перспективы разработки приложений BlackBerry
Создание проекта BlackBerry
В этом разделе мы создадим проект BlackBerry в Eclipse, используя перспективные функции BlackBerry Application Development. Выберите « Файл»> «Новый» . В новом окне выберите BlackBerry> BlackBerry Project и нажмите « Далее» .
Создание проекта BlackBerry
В окне « Новый проект BlackBerry» укажите « Имя проекта» (например, ParsingXML
). Выберите JRE как BlackBerry JRE 7.0.0 . Нажмите на Далее .
Указание имени проекта BlackBerry
В настройках Java выберите параметры сборки по умолчанию, которые включают в себя папки src
и res
для исходного кода проекта и папку bin
для вывода. Нажмите на Далее .
Указание настроек Java для проекта BlackBerry
В разделе « Шаблоны » выберите шаблон приложения BlackBerry и нажмите « Далее» .
Выбор шаблона проекта
В окне приложения UI укажите Детали приложения . Укажите имя пакета ( ParsingXML
), имя класса приложения ( ParsingXML
), имя класса экрана ( Parsing_XML
) и заголовок экрана . Нажмите на Готово .
Указание сведений о приложении
Проект BlackBerry создается. Проект BlackBerry состоит из следующих
артефакты:
- Класс (
ParsingXML
), который расширяет класс UiApplication. - Класс (
Parsing_XML
), который расширяет классMainScreen
. - Файл дескриптора приложения
BlackBerry_App_Descriptor.xml
.
Структура каталогов проекта BlackBerry показана ниже.
Структура проекта BlackBerry
Настройка дескриптора BlackBerry
Свойства проекта BlackBerry указываются в файле BlackBerry_App_Descriptor.xml
, показанном ниже в режиме графического интерфейса.
Файл BlackBerry_App_Descriptor.xml
Общая информация включает следующие поля свойств / флажки.
поле | Описание | Значение |
---|---|---|
заглавие | Название приложения | Разбор XML |
Версия | Версия приложения | 1.0.0 |
продавец | Название поставщика | BlackBerry Developer |
Тип приложения | «Приложение BlackBerry» для приложения BlackBerry | Приложение BlackBerry |
Приложение BlackBerry | Аргументы времени выполнения приложения | |
Автозапуск при запуске | Установите флажок для автоматического запуска приложения при запуске | правда |
Уровень запуска | Приоритет запуска | 7 (по умолчанию) — самый низкий приоритет |
Не отображать значок приложения | Установите флажок, чтобы не отображать значок приложения |
Дескриптор приложения может также включать языковые ресурсы и значки приложений. Альтернативные точки входа могут использоваться для запуска приложения в фоновом режиме или на переднем плане. BlackBerry_App_Descriptor.xml
указан ниже.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!— This file has been generated by the BlackBerry Plugin for Eclipse v3.6.0.
<Properties ModelVersion=»1.1.2″>
<General Title=»Parsing XML» Version=»1.0.0″ Vendor=»BlackBerry Developer» Description=»»/>
<Application Type=»BlackBerry Application» MainMIDletName=»» MainArgs=»» HomeScreenPosition=»0″ StartupTier=»7″ IsSystemModule=»false» IsAutostartup=»true»/>
<Resources hasTitleResource=»false» TitleResourceBundleName=»» TitleResourceBundleRelativePath=»» TitleResourceBundleClassName=»» TitleResourceBundleKey=»» DescriptionId=»»>
<Icons>
<Icon CanonicalFileName=»res\img\icon.png» IsFocus=»false»/>
</Icons>
</Resources>
<KeywordResources KeywordResourceBundleName=»» KeywordResourceBundleRelativePath=»» KeywordResourceBundleClassName=»» KeywordResourceBundleKey=»»/>
<Compile OutputCompilerMessages=»false» ConvertImages=»true» CreateWarningForNoExportedRoutine=»true» CompressResources=»false» AliasList=»»>
<PreprocessorDefines/>
</Compile>
<Packaging PreBuildStep=»» PostBuildStep=»» CleanStep=»» OutputFileName=»ParsingXML» OutputFolder=»deliverables» GenerateALXFile=»true»>
<AlxFiles/>
</Packaging>
<HiddenProperties>
<ClassProtection/>
<PackageProtection/></HiddenProperties>
<AlternateEntryPoints/>
</Properties>
|
Создание класса Screen
В этом разделе мы создадим экран для приложения BlackBerry. Как минимум экран должен иметь заголовок. Экран является классом MainScreen
и предоставляет функции, общие для приложений устройства RIM. Создайте класс, который расширяет класс MainScreen
и в конструкторе класса установите заголовок экрана, используя метод setTitle
. Класс экрана Parsing_XML
указан ниже.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package blackberry.xml;
import net.rim.device.api.ui.container.MainScreen;
/**
* A class extending the MainScreen class, which provides default standard
* behavior for BlackBerry GUI applications.
*/
public final class Parsing_XML extends MainScreen
{
/**
* Creates a new Parsing_XML object
*/
public Parsing_XML()
{
// Set the displayed title of the screen
setTitle(«Parsing XML»);
}
}
|
Разбор XML-документа
В классе ParsingXML
мы будем анализировать XML-документ. В catalog.xml
есть каталог для журнала.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?xml version = ‘1.0’ encoding = ‘UTF-8’?>
<catalog journal=»Oracle Magazine» publisher=»Oracle Publishing»>
<article>
<edition>Sept-Oct 2005</edition>
<title>Creating Search Pages</title>
<author>Steve Muench</author>
</article>
<article>
<edition>November — December 2010</edition>
<title>Agile Enterprise Architecture</title>
<author>Bob Rhubart</author>
</article>
</catalog>
|
Скопируйте XML-документ в папку res
папке src
или прямо в папку src
. Далее мы разработаем класс ParsingXML
, который расширяет класс UiApplication
, базовый класс для всех приложений устройства, которые предоставляют пользовательский интерфейс. Создайте переменную экземпляра для MainScreen
. Создайте String
переменную для значений элемента. Мы будем использовать Thread
для анализа XML-документа. Создайте переменную экземпляра для класса потока.
1
2
3
|
Parsing_XML screen = new Parsing_XML();
String element;
Connection connection;
|
В конструкторе класса установите заголовок экрана и добавьте экран MainScreen
в стек пользовательского интерфейса для рендеринга. Создайте экземпляр Thread
и запустите поток с помощью метода start()
.
1
2
3
4
|
screen.setTitle(«Parsing XML»);
pushScreen(screen);
connection = new Connection();
connection.start();
|
В методе main
создайте экземпляр класса ParsingXML
и вызовите поток диспетчера событий, используя метод enterEventDispatcher
.
Все приложения пользовательского интерфейса платформы BlackBerry содержат один поток диспетчера событий. После того, как экран помещен в стек отображения, все изменения должны быть сделаны либо в потоке диспетчера событий, либо в фоновом потоке. Мы будем использовать фоновый поток Connection для разбора XML-документа catalog.xml
.
1
2
|
ParsingXML theApp = new ParsingXML();
theApp.enterEventDispatcher();
|
Создайте экземпляр фабрики DocumentBuilderFactory
используя статический метод newInstance()
чтобы создать анализатор DOM и впоследствии создать дерево DOM из документа XML.
1
|
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
|
Создайте экземпляр анализатора DocumentBuilder
используя метод newDocumentBuilder
для последующего анализа XML-документа и создания объекта документа DOM.
1
|
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
|
Установите анализатор для проверки с помощью isValidating()
.
1
|
docBuilder.isValidating();
|
Создайте объект InputStream
из документа catalog.xml
. Включите ‘/’ в путь catalog.xml
.
1
|
InputStream inputStream = getClass().getResourceAsStream(«/catalog.xml»);
|
В качестве альтернативы InputStream
может быть создан с использованием литерала String
для XML и ByteArrayInputStream
.
01
02
03
04
05
06
07
08
09
10
11
|
/** str = «<?xml version = ‘1.0’ encoding = ‘UTF-8’?>» +
«<catalog journal=’Oracle Magazine’ publisher=’Oracle Publishing’>»
+ «<article>» + «<edition>Sept-Oct 2005</edition>»+
«<title>Creating Search Pages</title>»+
«<author>Steve Muench</author>» + «</article>» + «<article>»
+ «<edition>November — December 2010</edition>» +
«<title>Agile Enterprise Architecture</title>»+
«<author>Bob Rhubart</author>»+ «</article>»+ «</catalog>»;
// convert String into InputStream
InputStream inputStream =new ByteArrayInputStream(str.getBytes());**
|
Затем получите объект DOM Document
из InputStream
используя метод parse(InputStream)
.
1
|
Document document = docBuilder.parse(inputStream);
|
Получите элемент Document
, который является дочерним узлом XML-документа, а также корневым элементом, используя метод getDocumentElement()
. Нормализуйте документ XML с помощью метода normalize()
, который удаляет смежные и пустые текстовые узлы.
1
|
document.getDocumentElement().normalize();
|
Мы выведем значения элемента <title> на экран. Создайте NodeList
элементов title, используя метод getElementsByTagName()
.
1
|
NodeList list = document.getElementsByTagName(«title»);
|
Первый дочерний узел элемента — это текстовый узел в элементе. Текстовое значение в Text
узле получается с использованием getNodeValue()
. NodeList
по NodeList
и получите значения текстовых узлов для элементов заголовка. Чтобы сначала отобразить значения заголовков на экране, нам нужно получить блокировку события, используя метод getEventLock()
.
1
2
3
|
synchronized (UiApplication.getEventLock()) {
}
|
Блокировка события требуется для проблем производительности и параллелизма. Выведите значения заголовка на экран, используя метод add()
.
1
2
|
screen.add(new RichTextField(«Title : » + element));
screen.add(new SeparatorField());
|
Если для документа XML используется литерал String
выведите String
на экран.
1
|
screen.add(new RichTextField(str));
|
В блоке catch выводится сообщение об исключении, если оно есть.
1
|
screen.add(new RichTextField(«Error : » + e.toString()));
|
Класс ParsingXML.java
указан ниже.
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
|
package blackberry.xml;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.microedition.io.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
import net.rim.device.api.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class ParsingXML extends UiApplication {
// creating a member variable for the MainScreen
Parsing_XML screen = new Parsing_XML();
// string variable to store the value of the XML document element/s
String element;
Connection connection;
public static void main(String arg[]) {
ParsingXML theApp = new ParsingXML();
theApp.enterEventDispatcher();
}
public ParsingXML() {
screen.setTitle(«Parsing XML»);// setting title
screen.add(new RichTextField(«Requesting Catalog titles…..»));
screen.add(new SeparatorField());
// Push a screen onto the UI stack for rendering.
pushScreen(screen);
connection = new Connection();
connection.start();//
}
private class Connection extends Thread {
public Connection() {
super();
}
public void run() {
StreamConnection conn;
String str=null;
try {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory
.newDocumentBuilder();
docBuilder.isValidating();
InputStream inputStream = getClass().getResourceAsStream(«/catalog.xml»);
/** str = «<?xml version = ‘1.0’ encoding = ‘UTF-8’?>» +
«<catalog journal=’Oracle Magazine’ publisher=’Oracle Publishing’>»
+ «<article>» + «<edition>Sept-Oct 2005</edition>»+
«<title>Creating Search Pages</title>»+
«<author>Steve Muench</author>» + «</article>» + «<article>»
+ «<edition>November — December 2010</edition>» +
«<title>Agile Enterprise Architecture</title>»+
«<author>Bob Rhubart</author>»+ «</article>»+ «</catalog>»;
// convert String into InputStream
InputStream inputStream =new ByteArrayInputStream(str.getBytes());**/
Document document = docBuilder.parse(inputStream);
document.getDocumentElement().normalize();
NodeList list = document.getElementsByTagName(«title»);
element = new String();
// this «for» loop is used to parse through the
// XML document and extract all elements and their
// value, so they can be displayed on the device
for (int i = 0; i < list.getLength(); i++) {
Node value = list.item(i).getChildNodes().item(0);
element = value.getNodeValue();
synchronized (UiApplication.getEventLock()) {
screen.add(new RichTextField(«Title : » + element));
screen.add(new SeparatorField());
}
}// end for
// screen.add(new RichTextField(str));
}// end try
// will catch any exception thrown by the XML parser
catch (Exception e) {
screen.add(new RichTextField(«Error : » + e.toString()));
}
}// end connection function
}// end connection class
}
|
Запуск проекта BlackBerry
Далее мы ParsingXML
приложение ParsingXML
в Eclipse IDE. Щелкните правой кнопкой мыши ParsingXML и выберите « Запуск от имени»> «BlackBerry Simulator» .
Запуск приложения BlackBerry
Симулятор BlackBerry начинается. Приложение устанавливается на симулятор BlackBerry.
Установленное приложение BlackBerry
Нажмите на приложение, чтобы запустить приложение.
Запуск приложения BlackBerry
Заголовки из catalog.xml
будут отображены.
Разбор XML-документа
Структура ParsingXML
приложения ParsingXML
показана ниже.
Структура каталогов приложения ParsingXML
Если документ XML создается из String
литерала, XML также может выводиться на экран.
Отображение XML-документа
Резюме
В этой статье мы узнали о разборе XML на BlackBerry с использованием BlackBerry JDE. Мы использовали подключаемый модуль BlackBerry Java для Eclipse, чтобы добавить перспективу разработки приложений BlackBerry в Eclipse IDE. Мы использовали класс MainScreen
для создания экрана для устройства BlackBerry. Мы использовали класс UiApplication
для создания потока диспетчера событий, который должен иметь приложение платформы BlackBerry. Мы создали фоновый поток для анализа XML-документа и получили блокировку события, чтобы отобразить проанализированные заголовки каталога на экране BlackBerry. Мы также выводим XML-документ на экран.