我无法在AsyncTask中运行ProgressDialog:
private class Upload extends AsyncTask<String, Void, Void> {
ProgressDialog pd;
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(Activity.this);
pd.setMessage("Message");
pd.setIndeterminate(false);
pd.setMax(100);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setCancelable(false);
pd.show();
}
@Override
protected Void doInBackground(String... params) {
.......
public void write(byte[] bts, int st, int end) throws IOException {
totalSent += end;
progress = (int) ((totalSent / (float) contentLength) * 100);
publishProgress("Loaded "+progress+"%");
out.write(bts, st, end);
}
.......
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC", progress[0]);
pd.setProgress(Integer.parseInt(progress[0]));
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pd != null)
{
pd.dismiss();
}
}
进度对话框有效,但没有进展。但是在日志中我看到,进展正常。 因此,没有进展中的问题。
对于上面的代码我得到一个错误,说“AsyncTask字符串,Void,Void类型中的方法publishProgress(Void ...)不适用于参数(字符串)”。
无论我做什么,它都不起作用。我想,我想念一些东西。请帮忙)
答案 0 :(得分:0)
您正在尝试对包含parseInt
的字符串执行"Loaded "+progress+"%"
。它不起作用。试试这个:
publishProgress(""+progress);
// [...]
protected void onProgressUpdate(String... progress)
{
Log.d("ANDRO_ASYNC", "Loaded " + progress[0] + "%");
pd.setProgress(Integer.parseInt(progress[0]));
}
答案 1 :(得分:0)
onProgressUpdate
的参数在AsyncTask第二个泛型类型中定义。
改变这个:
private class Upload extends AsyncTask<String, Void, Void>
到此:
private class Upload extends AsyncTask<String, Integer, Void>
并更新此方法:
protected void onProgressUpdate(Integer... progress)
{
Log.d("ANDRO_ASYNC", "Loaded " + progress[0] + "%");
pd.setProgress(progress[0]);
}
您可以阅读有关AsynTask
的更多信息