0

我有一个 BlackBerry 应用程序,它在CheckIn屏幕中实现了发送按钮的侦听器。数据通过网络服务发送。如果数据发送成功,则会收到“OK”的确认信息。我正在尝试根据收到的响应在我的 BlackBerry 应用程序中切换屏幕。

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. 任何人都可以指导如何在黑莓应用程序之间切换屏幕。

编辑:我可以切换到任何其他屏幕,但我不能切换到MyScreen. NOTE:MyScreen 是应用程序的主(第一个)屏幕。上面的方法sendTextCheckIn()调用了另一个放在里面的方法MyScreen。这与错误有关吗?请指教。

4

2 回答 2

3

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

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

于 2013-02-03T19:54:21.087 回答
1

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

不要这样做e.printStackTrace()——那不会给你太多。

相反,做一些类似的事情System.err.println ("KABOOM in method abc() - " + e);- 似乎需要更多的努力,但相信我,在调试这样的问题时,这变得非常重要。

Catch Exception,除非您有很好的理由来捕获特定的 a 子类型 - 否则您最终会遇到意外且未捕获的异常,您将在 DAYS 中寻找这些异常。

于 2013-02-05T19:03:06.740 回答