Java AsyncTask中的ProgressDialog仅在任务结束时短时间显示
我有一个名为Java AsyncTask中的ProgressDialog仅在任务结束时短时间显示,java,android,android-asynctask,progressdialog,Java,Android,Android Asynctask,Progressdialog,我有一个名为LoginTask的AsyncTask,带有一个ProgressDialog,您可以在这里看到。 现在我的问题是,如果使用LoginTask(…).execute().get()启动此任务,ProgressDialog仅在AsyncTask的末尾显示得很短。我还加入了一些Thread.sleep(),但是如果我这样做,我还会在线程的末尾得到一个ProgressDialog 如何在整个异步任务中显示ProgressDialog public class LoginTask ex
LoginTask
的AsyncTask
,带有一个ProgressDialog
,您可以在这里看到。
现在我的问题是,如果使用LoginTask(…).execute().get()
启动此任务,ProgressDialog
仅在AsyncTask
的末尾显示得很短。我还加入了一些Thread.sleep()
,但是如果我这样做,我还会在线程的末尾得到一个ProgressDialog
如何在整个异步任务中显示ProgressDialog
public class LoginTask extends AsyncTask<Client, Void, Boolean>
{
private ProgressDialog progressDialog;
private MainActivity activity;
public LoginTask(MainActivity activity)
{
this.activity = activity;
}
@Override
protected void onPreExecute()
{
progressDialog = new ProgressDialog(activity);
progressDialog.setIndeterminate(true);
progressDialog.setMessage(activity.getText(R.string.asynctask_login_connect));
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
protected Boolean doInBackground(Client... params)
{
try
{
Client client = params[0];
if (client.connect())
{
progressDialog.setMessage(activity.getText(R.string.asynctask_login));
if (client.manageHandshake())
{
return true;
}
else
return false;
}
else
return false;
}
catch (Exception e)
{
Log.e(LoginTask.class.getSimpleName(), "Can not handshake and connect to/with server.", e);
return false;
}
}
@Override
protected void onPostExecute(Boolean result)
{
progressDialog.dismiss();
}
}
公共类登录任务扩展异步任务
{
私有进程对话;
私人活动;
公共登录任务(主要活动)
{
这个。活动=活动;
}
@凌驾
受保护的void onPreExecute()
{
progressDialog=新建progressDialog(活动);
progressDialog.setUndeterminate(true);
progressDialog.setMessage(activity.getText(R.string.asynctask\u login\u connect));
progressDialog.setCancelable(假);
progressDialog.show();
}
@凌驾
受保护的布尔doInBackground(客户端…参数)
{
尝试
{
客户端=参数[0];
if(client.connect())
{
setMessage(activity.getText(R.string.asynctask_login));
if(client.manageHandshake())
{
返回true;
}
其他的
返回false;
}
其他的
返回false;
}
捕获(例外e)
{
Log.e(LoginTask.class.getSimpleName(),“无法握手并连接到服务器。”,e);
返回false;
}
}
@凌驾
受保护的void onPostExecute(布尔结果)
{
progressDialog.disclose();
}
}
从get()的文档中
如有必要,等待计算完成,然后检索
它的结果
这意味着它将阻止调用
线程
,直到执行完成;这违背了使用AsyncTask
的全部目的。只需调用execute()
并从onPostExecute()
更新UI线程,为什么要调用get方法?使用onPostExecute从doInBackground获取结果将显示progressDialog,直到doInBackground未完成@ρ∑ρєK我不太清楚。我在onPostExecute中得到结果,但接下来该怎么办?您能给我一个例子吗?启动AsyncTaskLoginTask(…).execute()
而不是LoginTask(…).execute().get()
并在onPostExecute
中从服务器获取结果后移动要执行的代码