【问题标题】:use Looper.prepare to display dialog window使用 Looper.prepare 显示对话窗口
【发布时间】:2013-01-04 06:06:38
【问题描述】:

我想在执行工作后显示一个对话框窗口,并且应该显示进度对话框,直到工作完成。所以我尝试在以下代码中使用线程。

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();

运行此程序后,程序挂起。我不知道代码有什么问题。 请帮我弄清楚。 提前致谢。

【问题讨论】:

    标签: android android-alertdialog progressdialog looper


    【解决方案1】:

    您无法从非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();  
     }
    }
    

    【讨论】:

    • @Nunui 尝试了您的建议以在 runOnUiThread 中显示对话框。但我看不到进度对话框,但工作完成后我可以看到警报对话框。
    • Thankyou Nunu。现在我的工作正常了。我只是给出了需要在线程部分完成的工作,并在 runOnUiThread 中显示对话框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2012-06-27
    • 2015-01-12
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多