Вопрос

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

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top