2012-02-07 16 views
0

私はいくつかのコンテンツを取得するためにウェブページに接続するアプリケーションに取り組んでいます。私は進歩ダイアグラムを表示したいが、私は何か間違っていると思う。進捗ダイアグラムとハンドラを使用する

これは私のコードです:

 final ProgressDialog myProgressDialog = ProgressDialog.show(WhoisBeyondActivity.this, "Wait...", "Fetching data...", true); 
     Handler handler=new Handler(); 
     handler.post(new Runnable() 
      { 
       public void run() 
       { 
        try { 
         // code to execute 
         Thread.sleep(2000); 
        } catch (Exception e) { 

        } 
        myProgressDialog.dismiss(); 
       } 
      }); 

問題がprogressdialogは唯一私が作りたい操作の終了時に1秒を示しているということです。私はprogressdialogがdismiss()を実行するときにのみ実行されると思う。 progressdialogが消え去るだけであるようです...私を助けてください!!!私は多くのチュートリアルを読んだことがあります.HANDLERの代わりにTHREADのような多くのオプションを試しましたが、私はUIを編集する必要があるので、私にとっては役に立ちません。

+0

は別々のTHRを使用してみてください処理と進捗のダイアログが表示されます。 – Johnydep

答えて

0

あなたは、1話ごとに別のスレッドを使いたくないです。あなたが本当に欲しいのはAsynTaskです。これにより、進捗ダイアログを作成し、タスクのバックグラウンド処理をその場で行うことができます。書き込みが簡単で、実装が簡単です。あなたがリンクを参照する場合、必要なのはあなたの質問に実際に似ています。ちょっと微調整すれば、うまくいくはずです。

0
public class HelloActivity extends Activity { 
    protected static final String TAG = "HelloActivity"; 
    ProgressDialog myProgressDialog; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     // 
     showDialog(1); 
     final Handler handler=new Handler(){ 
      @Override 
      public void handleMessage(Message msg) { 
       //update UI here depending on what message is received. 
       switch(msg.what){ 
       case 0: 
        myProgressDialog.dismiss(); 
       } 

       super.handleMessage(msg); 
      } 

     }; 
     Thread t = new Thread(){ 

      public void run(){ 

         try { 
          // code to execute 
          Thread.sleep(5000); 
         } catch (Exception e) { 

         } 
         handler.sendEmptyMessage(0);//nothing to send 
        } 

     }; 
     t.start(); 
    } 
    @Override 
    protected Dialog onCreateDialog(int id) { 
     myProgressDialog = ProgressDialog.show(HelloActivity.this, "Wait...", "Fetching data...", true); 
     return myProgressDialog; 
    } 
} 
1

あなたが説明した動作を得ている理由は、post方法はただHandlerが接続されているスレッドに対してrunnableで渡さを実行するということです。あなたの場合、これはUIスレッドです。

ProgressDialog.show()は非同期です。これは、メソッドが戻るとすぐにダイアログを表示するのではなく、UIにダイアログを表示するように要求しただけです。すぐにpostのスレッドが2秒間スリープし、UIキューに追加され、UIがダイアログを実行するのをブロックしますshow。その後、UIがあなたの睡眠から目を覚まし、ダイアログが消されたことを示します。

ThreadまたはAsyncTaskのいずれかのネットワーク操作を実行する必要があります。詳細は、これらのリンクを見てください:

関連する問題