Диалоговое окно прогресса не будет отображаться с асинхронной задачей

Я искал ответ на это в течение некоторого времени. У меня есть асинхронная задача, которая загружает базу данных, необходимую для моего приложения, пока это загружает мое приложение, которое ничего не может сделать, так как все данные, на которые оно ссылается, находятся в этом файле, у меня есть приложение, ожидающее загрузки файла, но я пытаюсь показать диалоговое окно прогресса, чтобы пользователь знал, что что-то происходит, пока он ждет этого.

мой код в настоящее время

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 в предварительном выполнении и безуспешно перемещать это в вызывающее действие.

пожалуйста помоги!


person Philderbeast    schedule 10.10.2010    source источник
comment
У меня была еще одна попытка решить эту проблему, но безуспешно, я даже пытался добавить тост, чтобы увидеть, смогу ли я показать это, и мне тоже не повезло с этим!   -  person Philderbeast    schedule 31.10.2010


Ответы (3)


решение этого состояло в том, чтобы посмотреть на вызывающий класс, поток пользовательского интерфейса блокировался, поэтому диалог никогда не появлялся.

person Philderbeast    schedule 02.11.2010
comment
У меня такая же проблема, но я не понимаю вашего решения. Как вы изменили ситуацию, чтобы поток пользовательского интерфейса больше не блокировался? - person SMBiggs; 03.02.2012
comment
Я согласен с @ScottBiggs. Не могли бы вы объяснить себя немного больше, пожалуйста? - person adneal; 20.04.2012

Хм, как долго работает ваш метод doInBackground? Возможно, ваше диалоговое окно отображается, но время слишком быстрое, чтобы диалоговое окно появилось...

person mreichelt    schedule 10.10.2010
comment
это занимает около 1-2 минут, так что более чем достаточно, чтобы диалоговое окно появилось и было видно. - person Philderbeast; 10.10.2010

Ниже код работает нормально, я его использую:

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.

person MohdTausif    schedule 27.04.2013