Приложение Blackberry XML Parsing не работает

Я нашел один образец приложения из базы знаний Blackberry.

Из этого приложения я поместил этот образец приложения в свой плагин eclipse, и его код выглядит следующим образом:

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.*;

class XML_Parsing_Sample extends UiApplication {
    // creating a member variable for the MainScreen
    MainScreen _screen = new MainScreen();
    // string variables to store the values of the XML document
    String _node, _element;
    Connection _connectionthread;

    public static void main(String arg[]) {
        XML_Parsing_Sample application = new XML_Parsing_Sample();
        // create a new instance of the application
        // and start the application on the event thread
        application.enterEventDispatcher();
    }

    public XML_Parsing_Sample() {
        _screen.setTitle("XML Parsing");// setting title
        _screen.add(new RichTextField("Requesting....."));
        _screen.add(new SeparatorField());
        pushScreen(_screen); // creating a screen
        // creating a connection thread to run in the background
        _connectionthread = new Connection();
        _connectionthread.start();// starting the thread operation
    }

    public void updateField(String node, String element) {
        // receiving the parsed node and its value from the thread
        // and updating it here
        // so it can be displayed on the screen
        String title = "My App";
        _screen.add(new RichTextField(node + " : " + element));

        if (node.equals(title)) {
            _screen.add(new SeparatorField());
        }
    }

    private class Connection extends Thread {
        public Connection() {
            super();
        }

        public void run() {
            // define variables later used for parsing
            Document doc;
            StreamConnection conn;

            try {
                // providing the location of the XML file,
                // your address might be different
                conn = (StreamConnection) Connector
                        .open("http://www.sufalamtech.com/demo/moviewebservice/Test.xml");
                // next few lines creates variables to open a
                // stream, parse it, collect XML data and
                // extract the data which is required.
                // In this case they are elements,
                // node and the values of an element
                DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
                        .newInstance();
                DocumentBuilder docBuilder = docBuilderFactory
                        .newDocumentBuilder();
                docBuilder.isValidating();
                doc = docBuilder.parse(conn.openInputStream());
                doc.getDocumentElement().normalize();
                NodeList list = doc.getElementsByTagName("*");
                _node = new String();
                _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);
                    _node = list.item(i).getNodeName();
                    _element = value.getNodeValue();
                    updateField(_node, _element);
                }// end for
            }// end try
            // will catch any exception thrown by the XML parser
            catch (Exception e) {
                Dialog.alert("exception = " + e);
            }
        }// end connection function
    }// end connection class
}// end XML_Parsing_Sample

Но когда я запускаю это приложение, симулятор просто показывает мне пустой экран с меткой Requesting ...

Кто-нибудь поможет мне в этом?

Заранее спасибо...


person Nirmal    schedule 07.06.2010    source источник
comment
Вы пробовали режим отладки? Вы открыли MDS с помощью симулятора в конфигурации запуска?   -  person Michael B.    schedule 07.06.2010
comment
Привет, Майкл Б. Спасибо за ответ. Меня устраивает !! Но все же я хотел бы знать, как я могу отладить свое приложение bb, установив точку останова в плагине eclipse? Я попытался установить точку останова на какой-то строке, затем я выбираю «Выполнить» - ›Отладка ... Но все же эти параметры запускают приложение, не переходя в режим отладки. Пожалуйста, помогите мне в этом?   -  person Nirmal    schedule 07.06.2010


Ответы (1)


Попробуй это

public void updateField(String node, String element) {
    // receiving the parsed node and its value from the thread
    // and updating it here
    // so it can be displayed on the screen
    //Don't forget to add this next line when called from a thread
    synchronized (UiApplication.getEventLock()) {
        String title = "My App";
        _screen.add(new RichTextField(node + " : " + element));

        if (node.equals(title)) {
            _screen.add(new SeparatorField());
        }
        }
}

Этот синхронизированный (UiApplication.getEventLock()) действительно важен, он нужен вам каждый раз, когда поток пытается получить доступ к пользовательскому интерфейсу.

Существуют и другие решения, см. документацию

person Michael B.    schedule 07.06.2010