【发布时间】:2019-12-31 15:13:50
【问题描述】:
我有以下课程,它调用一个发送电子邮件的 Web 服务,这可能需要 5 秒,具体取决于连接。 这个想法是在发送邮件时向用户显示一条消息,以便它处于暂停状态并且无法执行任何操作
这是我的课:
private class TareaEnviarMail extends AsyncTask<String, Void, String>
{
ProgressDialog.Builder b;
@Override
protected String doInBackground(String... params)
{
try {
URL url = new URL("https://example.sendmail.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
InputStream in = new java.io.BufferedInputStream(conn.getInputStream());
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
}
catch(Exception ex)
{
Log.e("Error",ex.toString());
}
return null;
}
@Override
protected void onPostExecute(String result)
{
//HERE, I WANT TO DISMISS THE DIALOG!!! LIKE b.dismiss(); ¿?
Intent intent = new Intent(getApplicationContext(), ActividadPrincipal.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
@Override
protected void onPreExecute()
{
b = new ProgressDialog.Builder(ActividadNuevoTurnoSeleccionar.this);
b.setTitle("Enviando correo. Revise su casilla.");
b.setMessage("Por favor, espere mientras registramos el turno y le enviamos la confirmación a su casilla.");
b.create().show();
//ProgressDialog.show(ActividadNuevoTurnoSeleccionar.this,"Enviando correo. Revise su casilla.", "Por favor, espere mientras registramos el turno y le enviamos la confirmación a su casilla.");
}
@Override
protected void onProgressUpdate(Void... values) {}
}
问题是当后台任务结束时,现在我不知道如何在 onpostexecute 方法中关闭对话框。由于我没有对话框,而是构建器。 你可以帮帮我吗?谢谢
【问题讨论】:
-
存储对
ProgressDialog的引用,而不是它的构建器,您将能够隐藏它b.create()返回对对话框本身的引用 -
执行后写入 -> b.dismiss
-
b.create() 返回一个 AlertDialog。不是 ProgressDialog
-
然后将其声明为AlertDialog,您可以以同样的方式将其关闭
-
是的,我觉得这看起来很有趣,而且我错过了一些新的 API。没有
ProgressDialog.Builder,本身。ProgressDialog扩展了AlertDialog,所以这是AlertDialog的Builder。请改用静态ProgressDialog.show()方法之一。他们返回一个ProgressDialog,这就是你坚持的:developer.android.com/reference/android/app/…
标签: android android-asynctask progressdialog