Статьи

BlackBerry: работа с XML

XML является одним из наиболее часто используемых форматов обмена данными в сети. С распространением смартфонов стало распространенным требованием для анализа и отображения документов XML на мобильных устройствах. В этой статье я научу вас анализировать XML-документ в BlackBerry, а также отображать XML-документ в BlackBerry.


Во-первых, нам нужно установить подключаемый модуль BlackBerry Java для Eclipse, который можно установить одним из следующих двух способов.

  1. С сайта обновления Java-модуля BlackBerry
  2. Из плагина .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 в 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 состоит из следующих
артефакты:

  1. Класс ( ParsingXML ), который расширяет класс UiApplication.
  2. Класс ( Parsing_XML ), который расширяет класс MainScreen .
  3. Файл дескриптора приложения BlackBerry_App_Descriptor.xml .

Структура каталогов проекта 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>

В этом разделе мы создадим экран для приложения 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»);
    }
}

В классе 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
 
     
 
}

Далее мы 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-документ на экран.