我一直在寻找答案。我有一个异步任务,下载我的应用程序所需的数据库,而这是下载我的应用程序不能做任何事情,因为它引用的所有数据都在这个文件中,我让应用程序等待文件下载,但我试图显示进度对话框,以便用户在等待这种情况发生时知道正在发生的事情。
我的代码目前是
public class fileDownloader extends AsyncTask<Void, Integer, SQLiteDatabase>
{
private File dbFile;
private ProgressDialog progressDialog;
private Context context;
private SQLiteDatabase database;
private SQLiteDatabase.CursorFactory factory;
public fileDownloader(Context c)
{
super();
context = c;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
progressDialog = new ProgressDialog(this.context);
progressDialog.setMessage("Downloading Database...");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected SQLiteDatabase doInBackground(Void... v)
{
....
}
@Override
protected void onPostExecute(SQLiteDatabase db1)
{
progressDialog.dismiss();
}
但是没有任何显示我也尝试在预执行中直接调用ProgressDialog.show并将其移动到调用活动而没有运气。
请帮忙!
答案 0 :(得分:1)
对此的解决方案是查看UI线程被阻止的调用类,因为对话框从未显示过。
答案 1 :(得分:0)
嗯 - 你的doInBackground
方法有多长时间了?也许你的对话框显示出来了,但是对话框出现的时间太快了......
答案 2 :(得分:0)
下面的代码工作正常,我正在使用它:
private class DownloadHomeSectionData extends
AsyncTask<Void, Void, Boolean> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(mainScreen);
progressDialog.setMessage(getResources()
.getString(R.string.loading));
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected Boolean doInBackground(Void... params) {
for (HomeButton homeBtn : appDesigner.getHomeButtons()) {
StorageManager.getInstance().downloadFileSyncronously(
homeBtn.getTab_logo_selected_image());
StorageManager.getInstance().downloadFileSyncronously(
homeBtn.getTab_logo_unselected_image());
}
return null;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
progressDialog.dismiss();
}
}
在您的情况下,我认为您可能将错误的上下文传递给ProgressDialog
。