2010-12-06 8 views
1

Lorsque j'appuie sur mon bouton de connexion, il y a un appel de service web, au moment de l'appel de service web je dois afficher une boîte de dialogue de progression, et après avoir reçu webservice retourner à la page suivante ... page blanche lorsque l'intention est appelée également progresser de dialogue ne montre pasMise en œuvre du fil

if(Utility.isNetworkAvailable(currActivity)){     
// Utility.showProgressDialog(currActivity); 
          new Thread() { 
           @Override 
           public void run() {        
            currActivity.runOnUiThread(new Runnable() { 
             @Override 
             public void run() { 
              Intent intent = new Intent(Login.this, Listviewer.class); 
              startActivity(intent); 
              tempSplashTread = new Thread() { // Thread for showing wait cursor 
               @Override 
               public void run() { 
                currActivity.runOnUiThread(new Runnable() { 
                 @Override 
                 public void run() { 
                  myProgressDialog = new ProgressDialog(InfraSignPdfList.this);  
                  myProgressDialog.setMessage("Loading...     "); 
                  myProgressDialog.show(); 
                 } 
                }); 
               } 
              }; 
              tempSplashTread.start(); 
              finish(); 
             } 
            }); 
           } 
          }.start(); 
         }else { 
          Utility.noNetworkDialog(currActivity);       
         } 
+3

Veuillez formater votre code pour qu'il soit lisible. –

Répondre

2

C'est une mauvaise idée de mettre une boîte de dialogue de progression entre le lancement des applications. Vous devez implémenter la boîte de dialogue de progression dans celle qui effectue le téléchargement, puis afficher l'activité suivante une fois que les données téléchargées ont été transmises à la nouvelle activité.

Suivez étapes ci-dessous:

1.Après Connexion appel de serveur de démarrage Bouton pour obtenir des données du serveur jusque-là affichage ProgressDialog sur l'activité actuelle.

2.Une fois les données téléchargées, démarrez l'activité suivante en lui transmettant les données nécessaires.

2

Vous devriez le faire avec l'aide de AsyncTask (un fil backround intelligent) et ProgressDialog

AsyncTask permet une utilisation correcte et facile du thread d'interface utilisateur . Cette classe permet d'effectuer des opérations d'arrière-plan et de publier des résultats sur le thread d'interface utilisateur sans avoir à manipuler des threads et/ou des gestionnaires.

Une tâche asynchrone est définie par un calcul qui s'exécute sur un thread d'arrière-plan et dont le résultat est publié sur le thread de l'interface utilisateur. Une tâche asynchrone est définie par 3 types génériques, appelés Params, Progress et Result, et 4 étapes, appelées begin, doInBackground, processProgress et end.

Les 4 étapes

Lorsqu'une tâche asynchrone est exécutée, la tâche passe par 4 étapes:

onPreExecute(), sur le fil invoqué de l'interface utilisateur immédiatement après la tâche est exécutée. Cette étape est normalement utilisée pour configurer la tâche, par exemple en affichant une barre de progression dans l'interface utilisateur.

doInBackground(Params...), invoqué sur le thread d'arrière-plan immédiatement après l'exécution de onPreExecute(). Cette étape est utilisée pour effectuer un calcul en arrière-plan qui peut prendre beaucoup de temps. Les paramètres de la tâche asynchrone sont transmis à cette étape. Le résultat du calcul doit être retourné par cette étape et sera renvoyé à la dernière étape. Cette étape peut également utiliser publishProgress (Progress ...) pour publier une ou plusieurs unités de progression. Ces valeurs sont publiées sur le thread de l'interface utilisateur dans l'étape onProgressUpdate (Progress ...).

onProgressUpdate(Progress...), invoquée sur le thread d'interface utilisateur après un appel à publishProgress (Progress ...). Le moment de l'exécution est indéfini. Cette méthode est utilisée pour afficher toute forme de progression dans l'interface utilisateur alors que le calcul de l'arrière-plan est toujours en cours d'exécution. Par exemple, il peut être utilisé pour animer une barre de progression ou afficher des journaux dans un champ de texte.

onPostExecute(Result), invoquée sur le thread d'interface utilisateur après la fin du calcul de l'arrière-plan. Le résultat du calcul de l'arrière-plan est passé à cette étape en tant que paramètre. règles Threading

Il y a quelques règles de filetage qui doivent être suivies pour cette classe fonctionne correctement:

L'instance de tâche doit être créé sur le thread d'interface utilisateur. execute (Params ...) doit être appelée sur le thread d'interface utilisateur. Ne pas appeler onPreExecute(), onPostExecute (résultat), doInBackground (paramètres ...), onProgressUpdate (progression ...) manuellement. La tâche peut être exécutée qu'une seule fois (une exception sera levée si une seconde exécution est tentée.)

code Exemple
Qu'est-ce que l'adaptateur fait dans cet exemple est pas important, plus important de comprendre que vous avez besoin utiliser AsyncTask pour afficher une boîte de dialogue pour la progression.

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > { 
    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(viewContacts.this); 
     dialog.setMessage(getString(R.string.please_wait_while_loading)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#doInBackground(Params[]) 
    */ 
    @Override 
    protected ContactsListCursorAdapter doInBackground(Void... params) { 
     cur1 = objItem.getContacts(); 
     startManagingCursor(cur1); 

     adapter1 = new ContactsListCursorAdapter (viewContacts.this, 
       R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {}); 

     return adapter1; 
    } 

    protected void onPostExecute(ContactsListCursorAdapter result) { 
     list.setAdapter(result); 
     dialog.dismiss(); 
    } 
} 
+0

je vais essayer – xydev