2016-11-16 15 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の回答.for 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をどこに置くべきか、ボタンクリックイベント、または3つのサービス呼び出しのどこで説明すればいいですか?質問 – Jignesh

0

からUIを操作することrunonuithreadを使用することができます。しかし、あなたが行うことができる。例えばonPostExecute()方法 こと:OnPostExecuteはバックグラウンド計算が終了した後にUIスレッド上で呼び出された

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

。バックグラウンド計算の結果は、このステップにパラメータとして渡されます。 here

乾杯:AsyncTaskで3番目のパラメータは、あなたがonPostExecute()

ドキュメントのリンクにパラメータとして取得するオブジェクトのタイプです!

+0

から同じコードを手助けすることができればうれしいことですが、サービスコールをいくつか順番に実行する必要がありますし、AsyncTaskでProgressDialogを表示する必要があります。 – Jignesh

+0

をpostExecuteから順に実行します。その場合は –

+0

私は1つのメソッドだけですべてのコードを書く必要がありますが、Method1は多くの場所から呼び出されます、それはコードの冗長性....どのような他のソリューションですか? – Jignesh

関連する問題