2011-08-09 40 views
1

我正在設計一個應用程序,通過點擊一個按鈕從sqlite數據庫提取數據。我想在提取時間內顯示一個等待消息或進度條,只要這個過程很長,比如說超過3秒。否則,它可以繼續執行該程序。我該怎麼做呢 。我試圖顯示使用下面的代碼進度對話框,但它只是等待指定的睡眠時間和過程不顯示任何.... PLSS幫助進度條只顯示在長期操作

protected void GetOrders() 
{ 
    ProgressDialog dialog = null; 
    try 
    { 
     dialog=ProgressDialog.show(loginScreen.this,"PLEASE WAIT","LOADING CONTENTS ..",true); 
     //Accesses database 
     allOrders=ProductionOrdersBL.GetOrder(); 
     Thread.sleep(4000); 

    } 
    catch(Exception e){} 
    finally 
    { 
     dialog.dismiss(); 
    } 
} 

回答

0

我找到了解決辦法...我execute方法的調用後有一些操作。因此,當doInBackground()方法在非UI線程中執行時,我的UI線程繼續執行執行方法調用後的代碼......解決方案是在執行方法調用之後的主UI線程中不執行任何任務:)

1

首先是用於顯示進度條,你應該使用的AsyncTask() (this)。然後在其preExecute()方法說

try{ 
thread.sleep(3000); 
dialog=ProgressDialog.show(loginScreen.this,"PLEASE WAIT","LOADING CONTENTS ..",true); 

}catch(){ 
} 
在postExecute

則()使用

if(dialog.isShowing()){ 
dialog.dismiss 
} 
+0

謝謝ntc .... – Saiesh

+0

嘿,我仍然堅持.... AsyncTask中的doInBackground()方法返回到postExecute方法,甚至在它完全完成之前...我如何阻止它? – Saiesh

+0

這是不可能的..那永遠不會發生。可能還有一些其他問題,從服務器獲取數據時可能會出現異常。總是在doInBackground()完成後調用postExecute().. – ngesh