【发布时间】:2013-12-08 14:42:59
【问题描述】:
我有一个名为LoginTask 的AsyncTask<Client, Void, Boolean> 和一个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();
}
}
【问题讨论】:
-
为什么要调用get方法?使用 onPostExecute 从 doInBackground 获取结果将显示 progressDialog 直到 doInBackground 未完成
-
@ρяσѕρєяK 我不太明白。我在 onPostExecute 中得到了结果,但那该怎么办呢?可以举个例子吗?
-
启动 AsyncTask
LoginTask(...).execute()而不是LoginTask(...).execute().get()并在onPostExecute中从服务器获取结果后移动要执行的代码
标签: java android android-asynctask progressdialog