2013-01-21 21 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

相关问题