Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 黑莓手机中的切换屏幕_User Interface_Blackberry_Screen - Fatal编程技术网

User interface 黑莓手机中的切换屏幕

User interface 黑莓手机中的切换屏幕,user-interface,blackberry,screen,User Interface,Blackberry,Screen,我有一个BlackBerry应用程序,它在签入屏幕上实现了发送按钮的侦听器。数据通过web服务发送。如果数据发送成功,将收到确认消息“OK”。我正在尝试根据收到的响应在我的黑莓应用程序中切换屏幕 FieldChangeListener sendBtnListener = new FieldChangeListener() { public void fieldChanged(Field field, int context) {

我有一个BlackBerry应用程序,它在
签入
屏幕上实现了发送按钮的侦听器。数据通过web服务发送。如果数据发送成功,将收到确认消息“OK”。我正在尝试根据收到的响应在我的黑莓应用程序中切换屏幕

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();
            }
        }   
     };
但是,上面抛出了一个
应用程序错误104:IllegalStateException
。任何人都可以指导如何在黑莓应用程序之间切换屏幕


编辑:我可以切换到任何其他屏幕,但不能切换到
MyScreen
<代码>注意:MyScreen是应用程序的主(第一)屏幕。上面的方法
sendTextCheckIn()
调用另一个放在
MyScreen
中的方法。这和错误有关吗?请注意。

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


您提到您的非法状态异常问题只发生在MyScreen上。这使得它听起来像是MyScreen实现中的特定内容。开始缩小问题的范围-查看MyScreen的构造函数中发生了什么,以及在屏幕可见之前可能被调用的任何事件。其中一些代码是导致问题的原因。

UI事件线程上已经运行了“fieldChanged”事件,因此您不需要在其中调用invokeLater,只需直接调用pushScreen即可


您提到您的非法状态异常问题只发生在MyScreen上。这使得它听起来像是MyScreen实现中的特定内容。开始缩小问题的范围-查看MyScreen的构造函数中发生了什么,以及在屏幕可见之前可能被调用的任何事件。其中一些代码是导致问题的原因。

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

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

而是执行类似于
System.err.println(“方法abc()-”中的KABOOM+e)的操作-似乎需要更多的努力,但相信我,在调试此类问题时,这将变得非常宝贵


捕获
异常
,除非您有很好的理由捕获特定的a子类型-否则您将得到意外的、未捕获的异常,您将搜索数天。

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

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

而是执行类似于
System.err.println(“方法abc()-”中的KABOOM+e)的操作-似乎需要更多的努力,但相信我,在调试此类问题时,这将变得非常宝贵


捕获
异常
,除非您有很好的理由捕获特定的a子类型-否则您将得到意外的、未捕获的异常,您将搜索数天。

sendTextCheckIn()
方法是否真的进行了网络调用?如果是这样,您不应该在
fieldChanged()
中这样调用。您应该使用后台
线程
来运行该调用。当
sendTextCheckIn()
获得响应时,您应该使用
invokeLater()
调用
pushScreen()
sendTextCheckIn()
方法是否实际进行网络调用?如果是这样,您不应该在
fieldChanged()
中这样调用。您应该使用后台
线程
来运行该调用。当
sendTextCheckIn()
获得响应时,您应该使用
invokeLater()
调用
pushScreen()