2013-01-21 19 views
0

我想在工作執行後顯示一個對話框窗口,AND進度對話框應該被顯示,直到工作完成。所以我嘗試在下面的代碼中使用線程。使用Looper.prepare來顯示對話框窗口

ProgressDialog dialog=new ProgressDialog(SampActivity.this); 
        dialog.setMessage("Please wait.."); 
        dialog.setProgress(100); 
        dialog.setMax(5000); 
        dialog.show(); 
        Thread progressing = new Thread() 
         { 
         @Override 
         public void run() 
          { 
           try 
             { 
              Thread.sleep(5000); 
              Looper.prepare(); 
             AlertDialog.Builder 

alertDialogBuilder = new AlertDialog.Builder(SampActivity.this); 
            alertDialogBuilder.setMessage("finished"); 
            AlertDialog alertDialog = alertDialogBuilder.create(); 
            alertDialog.show(); 

            } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SampActivity.this); 
       alertDialogBuilder.setMessage("Unable to stop SAP.The connection is down.Please retry after sometime."); 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       alertDialog.show(); 
       } 

         finally 
         { 
          dialog.dismiss(); 
         } 

          runOnUiThread(new Runnable(){ 

               @Override 
               public void run() { 
                if(dialog.isShowing()) 
                 dialog.dismiss(); 
               } 
              }); 
         } 
        };  
       progressing.setPriority(Thread.MAX_PRIORITY); 
       progressing.start(); 

運行該程序後程序hangs.i不知道什麼是錯的代碼。 請幫我弄明白。 在此先感謝。

回答

2

您無法更新從非UI線程的UI ......你可以或者使用runOnUiThread做更新UI的部分:

runOnUiThread(new Runnable() { 
public void run() { 
    //display dialog 
} 
}); 

或者更好的使用AsyncTask ..

private class MyTask extends AsyncTask<URL, Integer, Long> { 

    private Context context; 

    public MyTask(Context context) { 
    this.context = context; 
    } 

    protected void onPreExecute() { 
     progressDialog = ProgressDialog.show(context, "", "msg", true); 
    } 

    protected Long doInBackground(URL... urls) { 
     //do something 
    } 

protected void onPostExecute(Long result) { 
    progressDialog.dismiss(); 
} 
} 
+0

@Nunui試圖在runOnUiThread中顯示對話框,但我看不到進度對話框,但是我可以在工作完成後看到alertdialog。 – krishna

+0

Thankyou Nunu.now我得到的東西工作fine.i只需要在runOnUiThread線程部分和對話框中顯示的工作需要完成。 – krishna

相關問題