我有一个AsyncTask,它接受网址并获取所有传递的网址的内容长度。我想在标题栏中更新进度条,并在获取最终值时显示警告框。但我无法理解如何将所有功能结合在一起。我现在的代码移动了进度条,但没有显示警告框。我没有自定义标题栏,而是调用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。但是使用上面的代码,所有网址内容长度都被添加到“总计”。我认为上面的代码是正确的。我的实现是:从主类中按下一个按钮。该按钮将所有URL传递给AsyncTask。当网址获得长度并添加到总数(在后台)时,标题栏中会出现一个进度条,直到后台工作完成。然后,警告对话框会提示用户进行选择。
虽然进度条到达结尾并且警报对话框没有显示,但发生了什么。在我开始添加此进度条之前,出现了警告对话框。现在它没有。如何使用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();
}
答案 0 :(得分:0)
sat是对的,但是你可以在onPostExecute()方法中做到这一点,它具有UI线程访问权限,总是记得只有doInBackground()没有UI线程访问所有3方法都有。如果您需要的不仅仅是具体的,并在您发现困难的地方显示代码。