Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTask中的ProgressDialog仅在任务结束时短时间显示_Java_Android_Android Asynctask_Progressdialog - Fatal编程技术网

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中得到结果,但接下来该怎么办?您能给我一个例子吗?启动AsyncTask
LoginTask(…).execute()
而不是
LoginTask(…).execute().get()
并在
onPostExecute
中从服务器获取结果后移动要执行的代码