2013-02-03 2 views
0

CheckIn 화면에 구현 된 보내기 버튼에 대한 수신기가있는 BlackBerry App이 있습니다. 데이터는 웹 서비스를 통해 전송됩니다. 데이터가 성공적으로 전송되면 "OK"라는 확인 메시지가 수신됩니다. 받은 응답에 따라 BlackBerry App에서 화면을 전환하려고합니다.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 App간에 화면을 전환하는 방법을 안내해 줄 수 있습니까?

편집 : 다른 화면으로 전환 할 수 있지만 MyScreen으로 전환 할 수 없습니다. NOTE: 고객 로고는 앱의 주 화면 (첫 번째 화면)입니다. 위의 메서드 sendTextCheckIn()MyScreen 안에있는 다른 메서드를 호출합니다. 이것은 오류와 관련이 있습니까? 제발 조언.

+2

'sendTextCheckIn()'메서드가 실제로 네트워크 호출을합니까? 그렇다면'fieldChanged()'에서 자신이 말하는 것처럼 호출하면 안됩니다. 이 호출을 실행하려면 백그라운드'Thread'를 사용해야합니다. 'sendTextCheckIn()'이 응답을 받으면'invokeLater()'를 사용하여'pushScreen()'을 호출해야합니다. – Nate

답변

3

'fieldChanged'이벤트는 UI 이벤트 스레드에서 이미 실행 중이므로, invokeLater 호출을 수행 할 필요가 없으므로 pushScreen을 직접 호출하면됩니다.

귀하는 IllegalStateException에 대한 문제점이 고객 로고에만 발생한다고 언급합니다. 따라서 고객 로고 구현과 관련된 특정 사운드처럼 들립니다. 문제의 범위를 좁히기 시작 - 고객 로고의 생성자에서 발생하는 상황과 화면이 표시되기 전에 호출 될 수있는 이벤트를 살펴보십시오. 이 코드 중 일부가 문제의 원인입니다.

1

try/catch에서 예외적으로 발생할 수있는 모든 것을 줄이십시오.

Do not do e.printStackTrace() -별로 도움이되지 않습니다.

대신 System.err.println ("KABOOM in method abc() - " + e);과 같은 작업을 수행하십시오. 더 많은 노력이 필요하지만 나를 신뢰하십시오. 이렇게 문제를 디버깅 할 때 그 작업은 무효화됩니다.

캐치 Exception 특정 하위 유형을 잡을 좋은 이유가 없으면 예외입니다. 그렇지 않으면 예기치 못한 예외가 발생하여 일 동안 사냥하게됩니다.