我的代码:
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连接类:具有用户名密码的套接字连接,我需要在一段时间内显示进度
我不知道怎么做!
答案 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();