0

我的代码:

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 连接类内部:有用户名密码的套接字连接,即需要显示一段时间的进度

我不知道该怎么做!

4

3 回答 3

2

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

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

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

于 2012-07-04T06:44:01.750 回答
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();

我想它会帮助你

于 2012-07-04T06:54:48.773 回答
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();

于 2012-07-04T07:07:44.657 回答