Blackberry navigationClick调用问题

时间:2012-10-10 12:36:50

标签: blackberry navigation click invoke

Eclipse一直在告诉我有关调用问题的信息。这是我得到的信息,如下所示。请帮我解决这个问题。我应该用什么代码来摆脱调用问题。感谢。

Warning!: method 'parsepack.xmlparsing.navigationClick(int,int)' not invoked.
Warning!: method 'parsepack.xmlparsing.insert(String,int)' not invoked.

这是方法navigationClick()

protected boolean navigationClick(int status, int time)
{
    try
    {
        //navigate here to another screen   
        ui.pushScreen(new ResultScreen()); 
    }
    catch(Exception e)
    {
       System.out.println("Exception:-  : navigationClick() "+e.toString());
    }
    return true;
}

这是方法insert()

public void insert(String toInsert, int index) 
{
    listElements.addElement(toInsert);
}

这是 xmlparsing.java

package parsepack;

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

import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.xml.parsers.DocumentBuilder;
import net.rim.device.api.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

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;
    UiApplication ui = UiApplication.getUiApplication();


    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
            ui.pushScreen(new ResultScreen());                
        }
        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://imforchange.org/international-movement-for-change/testing/data.xml"+";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("eventName");
                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) {


    }
}

ResultScreen.java

package parsepack;

import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;

public class ResultScreen extends MainScreen {

    public ResultScreen() {
        LabelField resultLabel = new LabelField("Result: ");  
        add(resultLabel);
    }  

}

1 个答案:

答案 0 :(得分:1)

首先,您看到的消息是警告,而不是错误。警告并不总是一个问题,但有时它们是。在这种情况下,我认为至少第一条消息是一个问题,所以你需要修复它。

1)首先,navigationClick()方法。编译器告诉您,您拥有从未从任何代码或BlackBerry OS基础结构调用的方法navigationClick()的实现。这可能不是你想要的。通常,navigationClick()是您在编写extends某个BlackBerry Field类的类中覆盖的方法。例如,ButtonField子类。在这种情况下,单击按钮时将调用navigationClick()

但是,您将navigationClick()方法放在主UIApplication子类中。那不是你想要的。您需要使用该方法在字段类中override navigationClick()方法。我不确定在用户点击时您想要调用此方法的字段。但是,例如,您可能会这样做:

_list = new ListField()
{
    public void paint(Graphics graphics)
    {
        graphics.setColor((int) mycolor);
        super.paint(graphics);
    }
    protected boolean navigationClick(int status, int time)
    {
        try
        {
            //navigate here to another screen
            ui.pushScreen(new ResultScreen());
        }
        catch(Exception e)
        {
            System.out.println("Exception:-  : navigationClick() "+e.toString());
        }
        return true;
    }
}; 

单击列表会使navigationClick()被调用,它将消除警告。

2)关于insert()的警告,那只是因为你没有在任何地方使用它。看起来您已添加该方法以允许xmlparsing类之外的代码能够将项插入列表中。也许这就是你想要的,但你还没有编写其他代码来使用该方法。我看到你至少有几个选择:

  1. 删除或注释掉insert()方法,直到您需要它为止。这将消除警告。
  2. 添加一些 使用此方法的代码。
  3. 忽略警告,只是确保您了解警告告诉您有一些代码尚未(尚未)必要,因为它未被使用
  4. 您可以在Java程序by doing thisthis, in the Eclipse preferences中禁止警告,如果您知道警告不是问题,并且您不希望过多的警告隐藏真正的问题。我通常不推荐这个。通常,最好修复警告,而不是隐藏警告。