Диалог прогресса не будет шоу с Async Task
-
29-09-2019 - |
Вопрос
Я некоторое время искал ответ на это. У меня есть асинхронная задача, которая загружает базу данных, необходимую для моего приложения, в то время как это загружает мое приложение, не может сделать что -либо, так как все ссылки на данные, которые он ссылается в этом файле, у меня есть приложение, ожидающее загрузки файла, но я пытаюсь Покажите диалоговое окно прогресса, чтобы пользователь знал, что что -то происходит, пока он ждет, пока это произойдет.
Мой код в настоящее время
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 в предварительном исполнении и не повезло, что это не повезло.
пожалуйста помоги!
Решение
Решением для этого было посмотреть на класс вызывающего класса. Нить пользовательского интерфейса была заблокирована там, что диалог никогда не появляется.
Другие советы
Хм - как долго твой doInBackground
метод запустить? Может быть, ваш диалог показан, но время для диалога слишком быстрое, чтобы показать диалог ...
Ниже код работает нормально, я использую его:
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
.