2010-10-10 3 views
2

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

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

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

У меня была еще одна проблема при решении этого без успеха, я даже попытался добавить тост, чтобы посмотреть, может ли это показать, и вам тоже не повезло! – Philderbeast

ответ

1

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

+1

У меня такая же проблема, но я не понимаю вашего решения. Как вы изменили ситуацию, чтобы поток пользовательского интерфейса больше не блокировался? –

+1

Я согласен с @ScottBiggs. Не могли бы вы объяснить себе немного больше, пожалуйста? – adneal

0

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

+0

занимает около 1 - 2 минут atm, поэтому более чем достаточно длинный, чтобы диалоговое окно появилось и было видно. – Philderbeast

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.

 Смежные вопросы

  • Нет связанных вопросов^_^