android进度条早早被驳回

时间:2012-07-04 06:38:53

标签: android android-progressbar

我的代码:

OnClickListener()//onclicklistener for button
{
    ProgressBar = new ProgressDialog(LoginPageActivity.this);
    ProgressBar.setMessage("please wait..");     
    ProgressBar.show();

    TcpConnection loginConnect = new TcpConnection();//TcpConnection is a class
    loginConnect.run();
    ProgressBar.dismiss();
}

我尝试在调用另一个类之前显示进度对话框,并在调用结束后将其关闭。但进度条不会显示,并且它很早就被解雇了。但我想在一段时间内显示进度条。

内部tcp连接类:具有用户名密码的套接字连接,我需要在一段时间内显示进度

我不知道怎么做!

3 个答案:

答案 0 :(得分:2)

使用AsyncTask来实现您的目标。您可以显示progressbar(在onPreExecute()内),直到您的任务结束(在doInBackground()内),然后您可以在任务完成后将其关闭(在onPostExecute()内)。

查看此链接以获取更多详细信息:

http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:2)

我如何理解您需要使用线程。喜欢这个

ProgressBar p = new ProgressDialog(LoginPageActivity.this);
Private Handler handler = new Handler();
p.setVisibality(0); //makes visible
    new Thread(new Runnable() {
                   public void run() {
                          TcpConnection loginConnect = new TcpConnection();
                          loginConnect.run();
                          handler.post(new Runnable() {
                                           public void run() {
                                      p.setVisibility(8);//Makes Invisible                      
                                                }
                                              });
                                   }

                  }).start();

我认为它会对你有所帮助

答案 2 :(得分:2)

我的猜测是loginConnect.run()正在自己的线程中运行。这就是进度对话框立即被解雇的原因。

这是你应该做的事情:

class LoginTask extends AsyncTask<Void, Void, Void>{
    ProgressDialog d;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        d = new ProgressDialog(LoginPageActivity.this);
        d.setMessage("please wait..");     
        d.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        TcpConnection loginConnect = new TcpConnection();
        loginConnect.run();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        d.dismiss();
    }   
}

并在onClickListener来电new LoginTask().execute();