2016-11-16 21 views
0

我有需要在AsyncTask之間進行用戶輸入的場景,但doInBackground無法顯示UI。 場景: 按鈕點擊,將有服務呼叫,根據服務呼叫的結果,我要顯示確認對話框,如果用戶點擊是,那麼會有另一個服務呼叫,如果用戶點擊否,則不同的服務呼叫。在顯示ProgressDialog時遇到問題。如何獲取AsyncTask中的用戶輸入Android

  • 計劃工作流程:

    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可以使用runonuithread從的AsyncTask

+0

可以解釋我應該在哪裏放置AsynTask,按鈕點擊事件還是所有三個服務調用?如果你可以從 – Jignesh

0

操作UI你根本無法處理doInBackgroud()方法用戶的交互。但是,你能做到這一點onPostExecute()方法 例如:

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

OnPostExecute是後臺計算結束後在UI線程調用。後臺計算的結果作爲參數傳遞給此步驟。在的AsyncTask第三個參數是對象的類型,你在onPostExecute()

文檔鏈接得到的參數:here

乾杯!

+0

這個問題得到相同的代碼,那麼這將非常有幫助,有幾個服務調用需要按順序運行,並且在AsyncTask中顯示ProgressDialog,可以用代碼來幫助我。 – Jignesh

+0

從postExecute依次運行它們。 –

+0

在這種情況下,我將不得不用一種方法編寫所有代碼,但Method1從很多地方被調用,它將是代碼冗餘....任何其他解決方案? – Jignesh

相關問題