2012-02-07 50 views
0

我正在研究一個連接到網頁以獲取一些內容的應用程序。我想展示一個progressdialog,但我認爲我做錯了什麼。使用進度對話框和處理程序

這是我的代碼:

 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在我想要操作的結束只顯示一秒鐘。我認爲progressdialog只有在執行dismiss()時纔會執行,因爲它顯示並快速消失。就像progressdialog出現只消失...請幫助我!我已經閱讀了很多教程,並且我嘗試了很多選項,例如THREAD而不是HANDLER,但對我來說它並不是有用的,因爲我必須編輯UI。

+0

嘗試使用一個單獨的THR用於處理和進度對話框。 – Johnydep 2012-02-07 16:23:23

回答

0

你不想單獨使用一個單獨的線程。你真正想要的是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方法將只執行傳遞runnable對線程該Handler連接。在你的情況下,這是UI線程。

您打電話給ProgressDialog.show(),這是異步的。實際上,只要方法返回,實際上並不顯示對話框,而只是請求UI顯示一個對話框。然後立即post睡眠2秒的線程,該線程被添加到UI隊列並阻止UI執行對話框show。用戶界面然後從你的睡眠中醒來,顯示對話隨後被解除。

您應該在新的ThreadAsyncTask中執行任何網絡操作。看看這些鏈接瞭解詳情: