2010-06-07 9 views
0

J'ai trouvé un exemple d'application de la base de connaissances Blackberry.L'application d'analyse XML Blackberry ne fonctionnait pas

A partir de cette application, j'ai mis cette application exemple sur mon plugin Eclipse, et le code est le suivant:

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 

Mais quand je suis en cours d'exécution de cette application, le simulateur me montrant un écran vide avec une étiquette Demande ...

Quelqu'un m'aider pour ça?

Merci à l'avance ...

+0

Avez-vous essayé le mode de débogage? Avez-vous ouvert MDS avec votre simulateur dans la configuration d'exécution? –

+0

Salut, Michael B. Merci pour la réponse. Ça marche pour moi !! Mais encore je voudrais savoir comment puis-je déboguer mon application bb en mettant un peu de breakpoint dans le plug-in eclipse? J'ai essayé de mettre un point d'arrêt sur une ligne, puis je sélectionne Exécuter -> Déboguer ... Mais toujours cette option exécute l'application, ne passe pas en mode débogage .. Plz m'aider pour cela? – Nirmal

Répondre

1

Essayez cette

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()); 
     } 
     } 
} 

Cette synchronisation (UiApplication.getEventLock()) est vraiment important, vous avez besoin ce chaque fil du temps essayer d'accéder à l'interface utilisateur.

Plus de solutions existent, voir le documentation

Questions connexes