2016-11-16 1 views
0

AsyncTask 사이에 사용자 입력이 필요한 시나리오가 있지만 doInBackground는 UI를 표시 할 수 없습니다. 시나리오 : 버튼 클릭, 서비스 호출 결과에 따라 확인 대화 상자를 표시합니다. 예를 클릭하면 다른 서비스 호출이 표시되고 사용자가 아니오를 클릭하면 다른 서비스가 클릭됩니다 요구. ProgressDialog를 표시 할 때 문제가 발생했습니다.AsyncTask 안드로이드에서 사용자 입력을 얻는 방법

  • 프로그램 작업 흐름 :

    btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    
          bool result = Method1(); 
          if(result){ 
              ShowConfirmation(new YesCallBackHelper() {Method2();}, new NoCallBackHelper() {Method3();}); 
          } 
          else{ 
              Method3(); 
          } 
    
        } 
    }); 
    
    
    private bool Method1() 
    { 
        return ServiceCall1(); 
    } 
    
    private bool Method2() 
    { 
        return ServiceCall2(); 
    } 
    
    private bool Method3() 
    { 
        return ServiceCall3(); 
    } 
    
+0

은 @ vickey의 대답과 배경 스레드에서 UI를 업데이트하는 것에 동의합니다. 로직을 runOnUiThread에 넣어야합니다. – Radhey

답변

0
onPreExecute() { 
    // some code #1 
} 

doInBackground() { 
    runOnUiThread(new Runnable() { 
       public void run() { 
        // some code #3 (Write your code here to run in UI thread) 

       } 
      }); 
} 

onPostExecute() { 
    // some code #3 
} 

u는 당신은 단순히 doInBackgroud() 방법으로 사용자 상호 작용을 처리 할 수 ​​AsyncTask를

+0

AsynTask, 버튼 클릭 이벤트 또는 세 가지 서비스 호출 모두 어디에 배치해야하는지 설명 할 수 있습니까? 그것은 질문에 – Jignesh

0

에서 UI를 조작 할 수 runonuithread를 사용할 수 있습니다. 그러나, 당신은 할 수있는 예를 들어 onPostExecute() 방법 그 : OnPostExecute가 배경 계산이 완료된 후 UI 스레드에서 호출

protected void onPostExecute(Long result) { 
    showDialog("Downloaded " + result + " bytes"); 
} 

. 백그라운드 계산의 결과는이 단계에 매개 변수로 전달됩니다. here

환호 : AsyncTask를 셋째 매개 변수는 onPostExecute()

문서 링크에 매개 변수로 얻을 개체의 유형입니다!

+0

에서 동일한 코드를 도울 수 있다면 좋을 것입니다 서비스의 커플을 순서대로 실행해야합니다 또한 ProgressDialog를 표시 AsyncTask에, 당신은 코드와 함께 나를 도울 수 있습니다. – Jignesh

+0

postExecute에서 순서대로 실행하십시오. –

+0

그 경우에는 한 가지 방법으로 모든 코드를 작성해야하지만 많은 곳에서 Method1이 호출됩니다. 코드 중복이됩니다. 다른 솔루션은 무엇입니까? – Jignesh

관련 문제