2010-10-10 4 views
2

Je recherche une réponse depuis un certain temps maintenant. J'ai une tâche asynchrone qui télécharge la base de données nécessaire pour mon application, alors que cela télécharge mon application ne peux rien faire comme toutes les données auxquelles il fait référence dans ce fichier, j'ai l'application en attente de téléchargement du fichier mais j'essaye de afficher un dialogue de progression afin que l'utilisateur sache que quelque chose se passe pendant qu'ils attendent que cela se produise.La boîte de dialogue de progression ne s'affichera pas avec une tâche asynchrone

mon code est actuellement

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(); 
    } 

mais rien n'apparaît que j'ai aussi essayé d'appeler directement ProgressDialog.show dans le pré et exécuter ce mouvement à l'activité d'appel sans chance.

aidez s'il vous plaît!

+0

J'ai eu une autre chance de résoudre ce problème sans succès, j'ai même essayé d'ajouter un toast pour voir si cela pouvait se produire et n'a pas eu de chance avec ça non plus! – Philderbeast

Répondre

1

la solution était de regarder la classe appelante que le thread de l'interface utilisateur était bloquée, la boîte de dialogue ne s'est jamais montrée.

+1

J'ai le même problème, mais je ne comprends pas votre solution. Comment avez-vous changé les choses pour que le fil de l'interface utilisateur ne soit plus bloqué? –

+1

Je suis d'accord avec @ScottBiggs. Pourriez-vous vous expliquer un peu plus, s'il vous plaît? – adneal

0

Hmm - combien de temps dure votre méthode doInBackground? Peut-être que votre boîte de dialogue est affichée, mais le temps est trop rapide pour que la boîte de dialogue s'affiche ...

+0

il prend environ 1 - 2 minutes atm donc plus que suffisamment longtemps pour le dialogue pour apparaître et être vu. – Philderbeast

0

Ci-dessous le code fonctionne très bien, je l'utilise:

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(); 
    } 
} 

Dans votre cas, je pense que vous passerez un mauvais contexte à ProgressDialog.

Questions connexes