2016-08-11 6 views
0

私はonCreateメソッドで実行されるAsyncTaskを持っています。しかし、私のProgressDialogは表示されません。そして、デバッグからAsyncTaskが実行されていることが確認されます。Android:ProgressDialogがonCreate()で呼び出されたAsyncTaskに表示されない

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_lifestyle); 
     context = getApplicationContext(); 

     new testAsync().execute(); 
} 

private class testAsync extends AsyncTask<Void,Void,Void> { 
     private ProgressDialog pDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(MainActivity.this); // tried with context, no difference 
      pDialog.setTitle("Inserting sample data"); 
      pDialog.setMessage("Please wait. This dialog will be dismissed upon completion."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TableControllerReadings TCR = new TableControllerReadings(context); 
      // TCR.insertSampleData(getApplicationContext()); 

      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
       //delay for 5 seconds 
       } 
      }, 5000); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void v) { 
      pDialog.dismiss(); 
     } 
    } 

答えて

1

であなたのタイマースレッドにあなたのpDialog.dismiss();してください。

理由:onPostExecute()すぐにバックグラウンドタスクが終了したために呼び出します。

onPostExecute()

private class testAsync extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog pDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(MainActivity.this); // tried with context, no difference 
      pDialog.setTitle("Inserting sample data"); 
      pDialog.setMessage("Please wait. This dialog will be dismissed upon completion."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TableControllerReadings TCR = new TableControllerReadings(context); 
      // TCR.insertSampleData(getApplicationContext()); 

      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        //delay for 5 seconds 
        pDialog.dismiss(); 
       } 
      }, 5000); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void v) { 
     // pDialog.dismiss(); 
     } 
    } 
+0

kaiこのコードを試してください –

+0

これはうまくいきます。どこが間違っていたのか分かりませんが、感謝です問題が解決した場合は –

+0

に印を付けてください。 –

1

アクティビティはonResumeメソッドが呼び出されるまで表示されません。 AsyncTaskの実行がonResumeより前に完了すると、ProgressDialogは表示されません。

だから、より良いコールnew testAsync().execute();onResume

+0

まだ動作しません。違いはありません –

+0

onresumeを呼び出すか、表示するかを決定するロジックまたはデザインを作成するために必須ではありません。 –

+0

asynctaskが 'onResume'で実行されるときに私のロジックを修正します。私は前のコメントを取り返します、明らかにそれは今働きます。 –

0

へのカーソル移動は、doInBackgroundでpDialog.show();を追加し、あなたのコードはのThread.sleep(5000)で正常に動作しているonResume

+0

'.show()'メソッドは、UIスレッドで呼び出さなければなりません。 'doInBackground'でそれを呼び出すと、" Looper.prepare() "を呼び出さなかったスレッド内でハンドラを作成できません。 –

+0

スレッド内に配置 –

0

new testAsync().execute();を追加するように、遅延にある。そのseprateスレッド。遅延を追加したい場合は、Timer.Scheduleの代わりにThread.Sleep(/ 時間、ミリ秒で /)を使用します。 Timer.Scheduleのため、非同期タスクはすばやく実行されてからダイアログが表示されます。

関連する問題