У меня есть AsyncTask, который принимает URL-адреса и получает длину содержимого для всех пропущенных URL-адресов.Я бы хотел, чтобы индикатор выполнения обновлялся в строке заголовка и отображал окно оповещения, когда оно получит окончательное значение.Но мне трудно понять, как заставить все это работать вместе.Код, который у меня есть, теперь перемещает индикатор выполнения, но окно предупреждения не отображается.У меня нет пользовательской строки заголовка, вместо этого я вызываю requestWindowFeature (FEATURE_PROGRESS).Любая помощь будет принята.
Это мой класс Async
private class MyClass extends AsyncTask<URL, Integer, Float>
{
protected Float doInBackground(URL... urls)
{
try
{
for(int i = 0; i<urls.length; i++)
{
url = urls[i];
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
size = urlConnection.getContentLength();
total += size;
while(progress<total)
{
progress++;
publishProgress(progress);
}
}
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
catch(IOException iox)
{
iox.printStackTrace();
}
finally
{
urlConnection.disconnect();
}
return total;
}
protected void onProgressUpdate(Integer... values)
{
setProgressBarVisibility(true);
setProgress(values[0]);
}
Редактировать: я понимаю, что publishProgress передает данные в onProgressUpdate из метода doInBackground.Но с помощью приведенного выше кода все длины содержимого URL-адресов добавляются к «общему».И я думаю, что приведенный выше код является правильным.Моя реализация этого: Нажмите кнопку из основного класса.Эта кнопка передает все URL-адреса в AsyncTask.В то время как URL-адреса получают длину и добавляют к общему (в фоновом режиме) в строке заголовка появляется индикатор выполнения, пока не будет выполнена фоновая работа.Затем в диалоговом окне с предупреждением пользователю предлагается сделать выбор.
Что происходит, если индикатор выполнения достигает конца и диалоговое окно с предупреждением не отображается.Перед тем, как я начал добавлять этот индикатор, появилось диалоговое окно с предупреждением.Теперь это не так.Как я могу добиться того, чтобы индикатор выполнения увеличивался должным образом с длиной содержимого URL-адреса .... отклонить индикатор выполнения ..... и затем загрузить диалоговое окно предупреждения в onPostExecute?
protected void onPostExecute(final Float result)
{
setProgressBarVisibility(false);
AlertDialog.Builder alertbox = new AlertDialog.Builder(Vacation.this);
alertbox.setMessage(TEXT STUFF);
alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
}
});
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
}
});
alertbox.show();
}