xmlblackberryjava-meblackberry-eclipse-pluginkxml2

kxml2 to parse xml file on blackberry


I want to get data in my BlackBerry app from an xml file. I reseach and see that using kxml2 is the best choice. But I can not find example code for it on Blackberry. I open kxml2.jar, I see xmlParser and kxmlParser, which one should I use?

Can anbody help me expalin how to use kxml2 clearly?


Solution

  • A normal XML parsing and displaying in listfield sample is here.. don't go for too complex this at basic..

    public class xmlparsing extends UiApplication implements ListFieldCallback, FieldChangeListener 
    {
    
    public static void main(String[] args)
    {
    xmlparsing app = new xmlparsing();
    app.enterEventDispatcher();
    }
    
    
    public long mycolor ;
    Connection _connectionthread; 
    private static ListField _list;
    private static Vector listElements = new Vector();
    public MainScreen screen = new MainScreen();
    VerticalFieldManager mainManager;
    VerticalFieldManager subManager;
    
    
    
    public xmlparsing() 
    { 
    super();
    pushScreen(screen);
    
    final Bitmap backgroundBitmap = Bitmap.getBitmapResource("blackbackground.png");
    
    mainManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL |     Manager.NO_VERTICAL_SCROLLBAR )
    {
    
    public void paint(Graphics graphics)
    {
    graphics.drawBitmap(0, 0, Display.getWidth(),Display.getHeight(),backgroundBitmap, 0, 0);
    
    super.paint(graphics);
    }
    
    };
    
    subManager = new VerticalFieldManager(Manager.VERTICAL_SCROLL | Manager.VERTICAL_SCROLLBAR     )
    {
    protected void sublayout( int maxWidth, int maxHeight )
    {
    int displayWidth = Display.getWidth();
    int displayHeight = Display.getHeight();
    
    super.sublayout( displayWidth, displayHeight);
    setExtent( displayWidth, displayHeight);
    }
    }; 
    
    
    screen.add(mainManager);
    
    _list = new ListField()
    
    {
    
    public void paint(Graphics graphics)
    
    {
    graphics.setColor((int) mycolor);
    super.paint(graphics);
    
    }
    
    };
    mycolor = 0x00FFFFFF;
    _list.invalidate();
    _list.setEmptyString("* Feeds Not Available *", DrawStyle.HCENTER);
    _list.setRowHeight(50);
    _list.setCallback(this);
    mainManager.add(subManager); 
    listElements.removeAllElements();
    _connectionthread = new Connection(); 
    _connectionthread.start();
    }
    
    
    protected boolean navigationClick(int status, int time)
    {
    try
    {
    //navigate here to another screen if you need. 
    }
    catch(Exception e)
    {
    System.out.println("Exception:- : navigationClick() "+e.toString());
    }
    return true;
    }
    
    
    
    private class Connection extends Thread
    { 
    public Connection()
    { 
    super(); 
    } 
    
    public void run() { 
    Document doc; 
    StreamConnection conn = null; 
    InputStream is = null; 
    try { 
    
    conn = (StreamConnection)     Connector.open("http://timesofindia.feedsportal.com/c/33039/f/533917/index.rss"+";deviceside=true");
    
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
    docBuilderFactory.setIgnoringElementContentWhitespace(true);
    docBuilderFactory.setCoalescing(true);
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
    docBuilder.isValidating(); 
    is = conn.openInputStream(); 
    doc = docBuilder.parse(is); 
    doc.getDocumentElement().normalize(); 
    NodeList list = doc.getElementsByTagName("title"); 
    for (int i = 0; i < list.getLength(); i++) { 
    Node textNode = list.item(i).getFirstChild(); 
    listElements.addElement(textNode.getNodeValue());
    } 
    
    } catch (Exception e) { 
    System.out.println(e.toString()); 
    } finally { 
    if (is != null) { 
    try { is.close(); 
    } catch (IOException ignored) {} 
    } if (conn != null) { 
    try { conn.close(); } 
    catch (IOException ignored) {} 
    } } UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() { 
    _list.setSize(listElements.size()); 
    subManager.add(_list);
    screen.invalidate();
    } 
    });
    }
    
    }
    
    
    public void drawListRow(ListField list, Graphics g, int index, int y, int w) 
    { 
    String tes = (String)listElements.elementAt(index);
    int yPos = 0+y;
    g.drawLine(0, yPos, w, yPos);
    g.drawText(tes, 5, 15+y, 0, w);
    }
    
    
    public Object get(ListField list, int index) 
    {
    return listElements.elementAt(index); 
    } 
    public int indexOfList(ListField list, String prefix, int string)
    { 
    return listElements.indexOf(prefix, string); 
    } 
    public int getPreferredWidth(ListField list) 
    { 
    return Display.getWidth(); 
    } 
    public void insert(String toInsert, int index) {
    listElements.addElement(toInsert);
    }
    
    public void fieldChanged(Field field, int context) {
    
    
    }
    }
    

    Full Project is here.