2
我有一個AsyncTask<Client, Void, Boolean>
調用LoginTask
與ProgressDialog
,你可以在這裏看到。 現在我的問題是,如果我使用LoginTask(...).execute().get()
啓動此任務,ProgressDialog
僅在AsyncTask
的末尾顯示爲非常短。另外,我已經加入了一些Thread.sleep()
,但如果我這樣做,我還會在線程結束時獲得一個ProgressDialog
。AsyncTask中的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我不完全明白。我得到的結果int onPostExecute,但該怎麼做呢?你能舉個例子嗎? –
啓動AsyncTask'LoginTask(...)。execute()'而不是'LoginTask(...)。execute()。get()'並移動你想在從onPostExecute獲得服務器結果後執行的代碼 –