在BlackBerry中切换屏幕

时间:2013-02-03 11:32:14

标签: user-interface blackberry screen

我有一个BlackBerry App,它在CheckIn屏幕中实现了发送按钮的监听器。数据通过Web服务发送。如果数据发送成功,则接收到“OK”的确认消息。我正在尝试在BlackBerry App中切换屏幕,具体取决于收到的响应。

FieldChangeListener sendBtnListener = new FieldChangeListener() {   
        public void fieldChanged(Field field, int context) 
        {   
            try {
                String alertMsg=sendTextCheckIn();
                if(alertMsg.equals("OK"))
                {
                    UiApplication.getUiApplication().invokeLater( new Runnable()
                    {
                        public void run ()
                        {
                            UiApplication.getUiApplication().pushScreen(new MyScreen());
                        }
                    } );
                }
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }   
     };

但是,上面的内容是App Error 104: IllegalStateException。任何人都可以指导如何在BlackBerry App之间切换屏幕。

编辑:我可以切换到任何其他屏幕,但我无法切换到MyScreenNOTE: MyScreen是应用程序的主要(第一个)屏幕。上述方法sendTextCheckIn()调用另一个位于MyScreen内的方法。这与错误有关吗?请指教。

2 个答案:

答案 0 :(得分:3)

'fieldChanged'事件已在UI事件线程上运行,因此您不需要在其中执行invokeLater调用,只需直接调用pushScreen。

您提到IllegalStateException的问题仅发生在MyScreen上。这使得它听起来像是MyScreen实现的特定内容。开始缩小问题范围 - 查看MyScreen构造函数中发生的情况,以及在屏幕可见之前可能调用的任何事件。其中一些代码是造成问题的原因。

答案 1 :(得分:1)

在try / catch中包装可能引发异常的所有内容。

不要做e.printStackTrace() - 这不会给你带来太多。

取而代之的是像System.err.println ("KABOOM in method abc() - " + e);这样的东西 - 似乎更省力,但相信我,在调试这样的问题时会变得不可用。

抓住Exception,除非你有充分的理由去捕捉特定的子类型 - 否则你最终将会遇到意外的,未捕获的异常,你会追捕DAYS。