0

CheckIn画面に実装された送信ボタンのリスナーを持つ BlackBerry アプリがあります。データは Web サービスを介して送信されます。データが正常に送信されると、「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. BlackBerry アプリ間で画面を切り替える方法を教えてください。

編集: 他の画面に切り替えることはできますが、に切り替えることはできませんMyScreenNOTE: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);-より多くの努力のように思えますが、私を信じてください。これは、このような問題をデバッグするときに非常に重要になります.

特定の a サブタイプをキャッチする非常に正当な理由がない限り、 CatchExceptionを使用します。そうしないと、予期しない、キャッチされない例外が発生し、DAYS を探すことになります。

于 2013-02-05T19:03:06.740 に答える