LWUIT и kXML Parser - PullRequest
       55

LWUIT и kXML Parser

0 голосов
/ 23 августа 2010
Uncaught exception: java.lang.Error: Static initializer: java.lang.NullPointerException,   0
 - java.lang.Class.throwError(), bci=57
 - java.lang.Class.initialize(), bci=221
 - com.sun.lwuit.Component.<init>(), bci=5
 - com.sun.lwuit.Container.<init>(), bci=1
 - com.sun.lwuit.Form.<init>(), bci=8
 - com.sun.lwuit.Form.<init>(), bci=1
 - com.midlet.RSSMidlet.<init>(), bci=11
 - java.lang.Class.newInstance(), bci=0
 - com.sun.midp.main.CldcMIDletLoader.newInstance(), bci=46
 - com.sun.midp.midlet.MIDletStateHandler.createMIDlet(), bci=66
 - com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet(), bci=17
 - com.sun.midp.midlet.MIDletStateHandler.startMIDlet(), bci=9
 - com.sun.midp.midlet.MIDletStateHandler.startMIDlet(), bci=4
 - com.sun.midp.appmanager.SelectorBase.run(), bci=33
 - java.lang.Thread.run(), bci=11

Кодирование:

package com.midlet;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.sun.lwuit.Command;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.animations.Transition3D;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
//import com.sun.lwuit.list.ListModel;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;

public class RSSMidlet extends MIDlet implements ActionListener{

    public Vector feedVector;
    public String rssFeed; 
    private Command cmdSelect;
    private Command cmdExit;

    private Form form1 = new Form("Feeds List");
//  private Form form2 = new Form("Feed Description");

//  private Vector feed_Title;
    private List resultList;
//  private List feedTitle;
    public RSSModel model = new RSSModel();

    class ReadXML extends Thread{

        public void run(){
            try{
                rssFeed = "http://www.rottentomatoes.com/syndication/rss/top_news.xml";
                HttpConnection httpConnection = (HttpConnection) Connector.open(rssFeed);
                KXmlParser parser = new KXmlParser();
                parser.setInput(new InputStreamReader(httpConnection.openInputStream()));

                parser.nextTag();
                parser.require(XmlPullParser.START_TAG, null, null);
                while(parser.nextTag() != XmlPullParser.END_TAG){
                    parser.nextTag();
                    parser.require(XmlPullParser.START_TAG, null, "channel");
                    readXMLData(parser);
                    parser.require(XmlPullParser.END_TAG, null, "channel");
                }
                parser.require(XmlPullParser.END_TAG, null, "rss");
                parser.next();
                parser.require(XmlPullParser.END_DOCUMENT, null, null);
            }catch(Exception e){

            }
        }
    }

    public RSSMidlet() {
        // TODO Auto-generated constructor stub
        Display.init(this);
        Resources r;
        try{
            r = Resources.open("/LWUITtheme.res");
            UIManager.getInstance().setThemeProps(r.getTheme("LWUITDefault"));
        }catch(IOException e){
            //e.printStackTrace();
        }




        resultList = new List();
        for(int i=0; i<feedVector.size();i++){
            model = (RSSModel) feedVector.elementAt(i);
            resultList.addItem(model.getTitle().toString());
        }


        form1.addComponent(BorderLayout.CENTER,resultList);
        form1.addCommand(cmdExit);
        form1.addCommand(cmdSelect);
        form1.setScrollable(true);
        //form1.addCommandListener((ActionListener) this);
        form1.setTransitionInAnimator(Transition3D.createRotation(250, true));
        form1.show();
    }

    protected void destroyApp(boolean unconditional)
            throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub


        new ReadXML().start();
    }

    public void readXMLData(KXmlParser parser) throws IOException, XmlPullParserException{


        while(!"item".equals(parser.getName()) ){
            /** Check if document doesn't include any item tags */
            if( parser.next() == XmlPullParser.END_DOCUMENT )
                throw new IOException("No items in RSS feed!");
        }

        parser.require(XmlPullParser.START_TAG, null, "item");



        while(parser.nextTag() != XmlPullParser.END_TAG){

            parser.require(XmlPullParser.START_TAG, null, null);
            String name = parser.getName();
            String text = parser.nextText();
            //System.out.println ("<"+name+">"+text);

            if(name.equals("pubDate")){
                model.setPubDate(text);
            }else if(name.equals("title")){
                model.setTitle(text);
            }else if(name.equals("link")){
                model.setLink(text);
            }else if(name.equals("description")){
                model.setDescription(text);
            }
            parser.require(XmlPullParser.END_TAG, null, name);
        }
        feedVector.addElement(model);
        parser.require(XmlPullParser.END_TAG, null, "item");
    }

    public void actionPerformed(ActionEvent evt) {
        // TODO Auto-generated method stub
        if(evt.getCommand() == cmdExit){
            notifyDestroyed();
        }else if(evt.getCommand() == cmdSelect){

        }
    }
}

Это мои коды. Я не могу запустить LWUIT с kXML. На форуме есть сообщение, что мне нужно инициализировать графические объекты после строки Display.init(this). Но где эта линия должна лежать? Пожалуйста, помогите мне ...

1 Ответ

3 голосов
/ 02 сентября 2010

Display.init (your_midlet) отвечает за инициализацию дисплея для LWUIT, нет необходимости делать это самостоятельно. Единственным ограничением является то, что вы должны инициализировать отображение, прежде чем использовать любую форму. Переместить линию

form1 = new Form("Feeds List")

после строки

Display.init(this);

поэтому вы инициализируете форму в конструкторе после инициализации отображения!

...