我有一个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之间切换屏幕。
编辑:我可以切换到任何其他屏幕,但我无法切换到MyScreen
。 NOTE:
MyScreen是应用程序的主要(第一个)屏幕。上述方法sendTextCheckIn()
调用另一个位于MyScreen
内的方法。这与错误有关吗?请指教。
答案 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。