我有一个黑莓应用程序,它有一个侦听器,用于在CheckIn
屏幕中实现发送按钮。数据通过 Web 服务发送。如果数据发送成功,则会收到"确定"的确认消息。我正在尝试根据收到的响应在我的黑莓应用程序中切换屏幕。
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
内的另一个方法。这与错误有关吗?请指教。
'fieldChanged' 事件已经在 UI 事件线程上运行,所以你不需要在其中执行 invokeLater 调用,只需直接调用 pushScreen 即可。
您提到您的 IllegalStateException 问题只发生在 MyScreen 上。 这使得它听起来像是MyScreen实现的特定内容。开始缩小问题范围 - 查看 MyScreen 构造函数中发生的情况,以及在屏幕可见之前可能调用的任何事件。 其中一些代码是导致问题的原因。
可能在 try/catch 中引发异常的内容。
不要做e.printStackTrace()
- 那不会给你太多。
相反,做一些类似System.err.println ("KABOOM in method abc() - " + e);
的事情 - 似乎需要更多的努力,但相信我,在调试这样的问题时,这变得非常宝贵。
抓住Exception
,除非你有很好的理由来捕捉特定的子类型 - 否则你最终会得到意想不到的,未捕获的异常,你将寻找几天。