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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 02 ноября 2010

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

0 голосов
/ 27 апреля 2013

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

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.

0 голосов
/ 10 октября 2010

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

...