2011-11-28 2 views
0

단추 연결 코드를 다음과 같이 소켓 연결을 구축 한 다음 네트워크를 통해 데이터를 보내려고합니다. 소켓 용 서버가 없으면 앱이 인식되고 오류가 발생하기까지 몇 초가 걸립니다. 이 시간에 App은 사용자가 App이 깨지지 않았 음을 보여주기위한 간단한 Notification을 갖기 위해 아무 것도하지 않습니다 (나는 예상 할 수 있듯이). 나는 ProgressBar를 조금 가져오고 싶습니다.대화 상자를 직접 불러 오시겠습니까?

private void sendButtonListener(Button sendButton, final String server, 
     final int port) { 
    sendButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      refreshInput(); 

      showDialog(DIALOG_CONNECTING); 
      //Getting the SocketConnection and try to send the Data 
      attempToSendXML(builder, profilename); 
      dismissDialog(DIALOG_CONNECTING); 
     } 
    }); 
} 

내 문제는 showDialog() 방법 인 onClick(View v) 방법이 완료된 후 ProgressBar를 나타납니다 것으로 보인다는 것이다. 그래서 내 예제에서는 그냥 아무것도 보여줍니다 (그냥 attempToSendXML() 메서드가 끝날 때까지 중단됩니다), 왜냐하면 나는 데이터를 보내려고했는데 대화 상자를 닫습니다.

나는 사람들이 내 점수를 얻고 나를 도울 수 있기를 바랍니다. 나는 지금 2 시간 동안 주변을 둘러 보았고 실제로 그것을 얻지 못했습니다 ...

답변

1

attempToSendXML()과 같은 긴 작업으로 UI 스레드를 차단해서는 안됩니다.

대신 AsyncTask를 사용해야합니다. AsyncTask는 문제의 해결책이기도합니다.

herehere을 참조하십시오.

AsyncTask에는 대화 상자가 표시되는 onPreExecute() -method가 있습니다. attempToSendXML()doInBackground 메서드에서 실행되고 AsyncTask 메서드 onPostExecute에서 대화 상자가 닫힙니다. 이렇게하면 UI 스레드를 차단하지 않고 ANR 예외도 얻지 않고 백그라운드에서 작업이 진행되는 동안 진행 대화 상자에 표시됩니다.

관련 문제