我有一个 AsyncTask 接受 url 并获取所有通过的 url 的内容长度。我想在标题栏中更新进度条,并在完成获取最终值时显示警报框。但是我无法理解如何使这一切一起发挥作用。我现在拥有的代码会移动进度条,但不会显示警报框。我没有自定义标题栏,而是调用 requestWindowFeature(FEATURE_PROGRESS)。任何帮助,将不胜感激。
这是我的异步课程
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 从 doInBackground 方法将数据传递给 onProgressUpdate 。但是使用上面的这段代码,所有的 urls 内容长度都被添加到“total”中。而且我认为上面的代码是正确的。我的实现是:从主类中按下一个按钮。该按钮将所有 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();
}