2011-01-25 25 views
1

新しい活動を開始すると、私のprogressDialogがすぐに表示されません。私はAsyncTaskを同じものに使用しています。私は次のアクティビティでWebサービスからデータをロードしています。進行状況ダイアログがすぐに表示されない

ourdepbtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      new TheTask(AboutUs.this.getParent()).execute(); 
     } 
    }); 

任意の提案:私はこのクラスのボタンのonClickのインスタンスを作成してい

private class TheTask extends AsyncTask<Void, Void, Void>{ 

    Context con; 
    Intent aboutusIntent; 
    TabGroupActivity parentActivity; 
    private TheTask(Context context) 
    { 
     this.con=context; 
    } 

    @Override 
    protected void onPreExecute() { 
     progDialog = ProgressDialog.show(con, "Loading... ", 
       "please wait....", true); 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     aboutusIntent = new Intent(con, Departments.class); 
      parentActivity = (TabGroupActivity)getParent(); 
     //progDialog.show(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     parentActivity.startChildActivity("Departments", aboutusIntent); 
     if(progDialog.isShowing()) 
     { 
     progDialog.dismiss(); 
     } 


    } 

} 

:以下は、私の非同期クラスですか?

答えて

3
Handler mHandler = new Handler();// This statement is to be called by the main thread 

ProgressDialog.show();// This statement is to be called by the main thread 

Thread t = new Thread( 
new Runnable(){ 

public void run() 
{ 

    callWebServicesHereAndFetchingMethod(); // 

    mHandler.post(new Runnable(){ 

    public void run() 
    { 
    ProgressDialog.dismiss(); 
    } 
}); 
    }}); 
t.start(); 
+0

ありがとうJavanator.Iこれを試してみましょう。 – Nitish

+0

このアプリケーションではタブグループを使用しています。これはこれと何か関係がありますか?なぜなら私がdoInBackground()にstartActivityを置くと、progressDialogが現れますが、宣言がクラッシュするからです。私はFutureTaskErrorに遭遇する。 – Nitish

+0

このことはタブグループとは関係ありません。すべてのビジュアルエフェクトはメインスレッドのみで制御されます。単一のスレッドはフェッチを行うことも、ダイアログ内の進行を表示することもできます。ハンドラクラスは基本的にこれに使用されます。私が貼り付けたコードはすべて私のプロジェクトで使用しており、ダイアログを使用してフェッチの進行状況を表示するのに最適です。メインスレッド以外のスレッドがビジュアルエフェクトを実装しようとする場合これは例外でアプリをクラッシュさせます – Javanator

1

コードにマルチスレッドが必要....すべての視覚効果は、メインスレッドによって制御されます。メインスレッドを使用してWebサービスから何らかの処理やデータ処理を行った場合は、進行状況ダイアログは表示されません。 メインスレッドによって呼び出されたプログレスダイアログショー機能を作成します。別のスレッドを使用してすべてのフェッチを実行します。取り出しスレッドに参加するスレッドを作成し、ハンドラクラスオブジェクトを使用して、実行する任意の視覚効果を生成します。

これ以上の詳細が必要な場合は、私は、あまりにも

+0

はいJavanator.I」それについての詳細を読むことができますあなたが示唆しているものの例を挙げることができれば訴えます。 – Nitish

+0

投稿コードを確認してください – Javanator

1

ユーザーインターフェース(UI)はスレッドセーフではないことを投稿するUIへの呼び出しメインスレッド(また、「UIスレッド」と呼ばれる)から作られなければならないだろう。あなたが探しているものを

Handler handler = new Handler(); // Create on main thread. 

// ... 

handler.post(new Runnable() { 
    @Override 
    public void run() { 
    ProgressDialog dialog = ProgressDialog.show(this, "", 
     "Loading. Please wait...", true); 
    } 
}); 
1

あなたはonPreExecuteでProgressDialogを(表示/非表示することができAsyncTask、)/ onPostExecute(ある)

あなたはhere

関連する問題