需要实现进度条和线程

时间:2011-08-17 03:36:43

标签: android

我有与webservice通信的功能,并且数据插入到数据库中 在此函数执行期间....我无法预测执行该函数需要多长时间。

问题是我需要显示一个progess栏,当函数执行停止时它结束。它需要显示进度。

或者是否还有其他任何选项显示正在进行中......

我的功能如下所示....

public Boolean startdownload() {    


        downloadhelper = new download_helper(this);

        downloadhelper.DownloadProblemAndReasonCode();      

        pkManifest=downloadhelper.DownloadNewManifest();        

        downloadhelper.DownloadNewMessages();


        return True;
    }

我也在开始按钮的onclick事件上实现线程.......

start_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                                Status.setText("Download in Progress....");
                new Thread(new Runnable() {
                    public void run() {
                        try {

                                startdownload();
                                onStop();
                                isRunning=false;
                        } catch (Throwable t) {
                            t.toString();
                        }

                    }
                   }).start();              

                if (isRunning=false)
                {
                    Status.setText("Download Completed");
                }

            }
        });

5 个答案:

答案 0 :(得分:1)

更简单的方法是使用Android的Asynctask概念并且非常容易实现 参考this

答案 1 :(得分:1)

  //Take one progress bar Display here

new Thread(new Runnable() {
                public void run() {
                    try {

                            startdownload();
                            onStop();
                            isRunning=false;
                    } catch (Throwable t) {
                        t.toString();
                    }

                }
               }).start();              

            if (isRunning=false)
            {
                Status.setText("Download Completed");
            }
   handler.sendEmptyMessagetrue(0);

        }
//Now take handler class here to dismiss() progress bar when worked finish in thread
private Handler handler()=new Handler(){
override onhandlerMsge();dissmiss dialog in this method
}

答案 2 :(得分:1)

您可以在布局的某处放置ProgressBar,当您准备好进行网络通信时,请致电mProgressBar.setVisibility(View.VISIBLE);完成通话后mProgressBar.setVisibility(View.GONE);

另一种方法是使用Android系统栏中的进度条。要在onCreate()调用requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)后的setContentView() setProgressBarIndeterminateVisibility(boolean)中执行该操作,您可以在活动的任何地方致电{{1}}。

答案 3 :(得分:0)

Asynctask旁边,您可以使用Handler及其handleMessage()。在工作线程内部,向Handler发送消息以显示进度并在工作线程结束时通知

答案 4 :(得分:0)

showLoading();// Calling showdialog before downloading..
        Thread t = new Thread(){
            public void run() {

                // Code for download....

                // After download UI thread will call
                runOnUiThread(new Runnable() { 
                    @Override 
                    public void run() { 
                     dialog.cancel();
                     alertbox("Info","Download Completed");
                    } 
                });
            }};
            t.start();

public ProgressDialog dialog;
    public  void showLoading () {


            // prepare the dialog box
            //ProgressDialog 
            dialog = new ProgressDialog(this);

            // make the progress bar cancelable
            dialog.setCancelable(true);

            // set a message text
            dialog.setMessage("Please wait while Downloading..");


            // show it
            dialog.show();




        }
protected void alertbox(String title, String mymessage)
   {
   new AlertDialog.Builder(this)
      .setMessage(mymessage)
      .setTitle(title)
      .setCancelable(true)
      .setNeutralButton("OK",
         new DialogInterface.OnClickListener() {
         @Override
        public void onClick(DialogInterface dialog, int whichButton){}
         })
      .show();
   }

编辑:2011年8月19日
您可以使用以下代码取消进度对话框。请尝试

dialog.setButton("Cancel",new DialogInterface.OnClickListener() {


            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                // TODO Auto-generated method stub

            }
        });