IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

ProgressDialog : comment savoir quand la ListView est chargée ?


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut ProgressDialog : comment savoir quand la ListView est chargée ?
    Bonjour,

    Dans mon appli Android, l'ACTIVITY A appelle l'ACTIVITY B.
    L'ACTIVITY B affiche une ListView, en fonction d'un critère sélectionné dans la l'ACTIVITY A.
    La ListView affiche des données qui proviennent d'une BD Sqlite embarquée.

    Et je souhaiterai donc afficher une progressDialog à l'ouverture de l'ACTIVITY B, le temps du chargement des données qui proviennent de la BD embarquée.

    J'ai trouvé des tutoriaux intéressants qui me mettent sur la voie.
    Mais je n'en ai pas trouvé qui m'indique comment voir où en est le chargement des données qui proviennent de la BD.

    J'ai le code ci dessous sous la main, mais j'imagine qu'il faudrait que je remplace le sleep(5000) par le chargement de mes données .... mais savez vous comment faire ?

    Merci par avance pour ceux qui pourront m'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    private void traitementDesDonneesAvecPourcentage() {
     
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On donne un titre à notre progress dialog
    		progressDialog.setTitle("Mon chargement");
    		// On spécifie le style 
    		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    		// On spécifie le maximum
    		progressDialog.setMax(10);
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
    				// Boucle de 1 a 10
    				for (int i = 0; i < 10; i++) {
    					try {
    						// Attends 500 millisecondes
    						Thread.sleep(500);
    						// On change la valeur de la progression
    						progressDialog.setProgress(i+1);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    				}
     
    				handler.sendEmptyMessage(0);
     
    				// A la fin du traitement, on fait disparaitre notre message
    				progressDialog.dismiss();
    			}
    		}).start();	
    	}
     
    	private void traitementDesDonnees() {
     
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
    				// Boucle de 1 a 10
    				for (int i = 0; i < 10; i++) {
    					try {
    						// Attends 500 millisecondes
    						Thread.sleep(500);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    				}
     
    				handler.sendEmptyMessage(0);
     
    				// A la fin du traitement, on fait disparaitre notre message
    				progressDialog.dismiss();
    			}
    		}).start();
    	}
     
    	private Handler handler = new Handler() {
    		public void handleMessage(android.os.Message msg) {
    			if(msg.what == 0) {
    				monBouton.setText("C'est bon");
    			}
    		};
    	};

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    Peux tu nous montrer le code actuelle qui te permet d'initialiser la connexion avec ta base et comment tu initialises ta liste avec les données ?

    Merci.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Ces derniers jours j'ai essayé de chercher par moi même avant de revenir poster sur le forum.... mais le sujet me semble bien compliqué (du moins pour moi qui suis encore débutant sur le sujet).

    Je te donne quand même les infos que tu me demandais .... si tu avais une piste à me proposer ...


    Initialiser la connexion avec la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    ... 
    import static com.template.fr.persistence.DatabaseFields.*;
     
    public class PoDao extends AbstractDao<Po> {
     
        private DatabaseHelper databaseHelper;
     
        public List<Po> getPoPou(Context ctx, String fctPo) {
            databaseHelper = new DatabaseHelper(ctx, DATABASE_NAME);
            SQLiteDatabase readableDatabase = databaseHelper.getReadableDatabase();
            ArrayList<Po> Pos = new ArrayList<Po>();
            String whereClause = LIB + "=?";
            String[] whereClauseValue = new String[]{fctPo};
            Cursor c = readableDatabase.query(TABLE_PO, null, whereClause,
                    whereClauseValue, PoE, null, PoE);
            if (c.moveToFirst()) {
                do {
     
                    Pos.add(new Po(c.getInt(0), c.getString(1), c.getString(2)));
     
                } while (c.moveToNext());
            }
            c.close();
            readableDatabase.close();
            return Pos;
        }
     
    }
    ...

    Initialiser la liste avec les données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class fctPoActivity extends TemplateMenuActivity {
    	private final PosteDao posteDao = new PosteDao();
    	private ListView lv;
    	private PosteAdapter postesAdapter;
    
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.fctPo);
    		titleText.setText(getResources().getString(R.string.labelPo));
    		TextView titre = (TextView) findViewById(R.id.postesTitle);
    
    		String fctPo = extractMet();
    		titre.setText(new SpannableString(titre.getText() + " " + fctPo));
    		configListView(fctPo);
    	}
    
    	private void configListView(String fctPo) {
    		lv = (ListView) this.findViewById(android.R.id.list);
    		postesAdapter = new PosteAdapter(this, R.layout.row,
    				posteDao.getPoPou(this, fctPo));
    		postesAdapter.notifyDataSetChanged();
    		lv.setAdapter(postesAdapter);
    		lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    			@Override
    			public void onItemClick(AdapterView<?> list, View v, int pos,
    					long id) {
    				Intent detailIntent;
    				detailIntent = new Intent(fctPoActivity.this,
    						PosteDetailActivity.class);
    				int idPo = ((Po) list.getItemAtPosition(pos)).getId();
    				detailIntent.putExtra("idPo", idPo);
    				startActivity(detailIntent);
    			}
    		});
    	}

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Essaye avec quelque chose comme ça peut être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class fctPoActivity extends TemplateMenuActivity {
    	private final PosteDao posteDao = new PosteDao();
    	private ListView lv;
    	private PosteAdapter postesAdapter;
    
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.fctPo);
    		titleText.setText(getResources().getString(R.string.labelPo));
    		TextView titre = (TextView) findViewById(R.id.postesTitle);
    
    		String fctPo = extractMet();
    		titre.setText(new SpannableString(titre.getText() + " " + fctPo));
    		configListView(fctPo);
    	}
    
    	private void configListView(String fctPo) {
    		lv = (ListView) this.findViewById(android.R.id.list);
    		
                    traitementDesDonnees(lv);
    
    		lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    			@Override
    			public void onItemClick(AdapterView<?> list, View v, int pos,
    					long id) {
    				Intent detailIntent;
    				detailIntent = new Intent(fctPoActivity.this,
    						PosteDetailActivity.class);
    				int idPo = ((Po) list.getItemAtPosition(pos)).getId();
    				detailIntent.putExtra("idPo", idPo);
    				startActivity(detailIntent);
    			}
    		});
    	}
    
    private void traitementDesDonnees(final ListView lv) {
     
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
    				
     	                  postesAdapter = new PosteAdapter(fctPoActivity.this, R.layout.row,
    				posteDao.getPoPou(fctPoActivity.this, fctPo));
    		         postesAdapter.notifyDataSetChanged();
              		lv.setAdapter(postesAdapter);
    				handler.sendEmptyMessage(0);
     
    				// A la fin du traitement, on fait disparaitre notre message
    				progressDialog.dismiss();
    			}
    		}).start();
    	}
     
    	private Handler handler = new Handler() {
    		public void handleMessage(android.os.Message msg) {
    			if(msg.what == 0) {
    
    	
    				Log.e("TAG", "c'est bon");
    			}
    		};
    	};
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup pour le coup de main.
    Je te reviens dès que j'aurais essayé, pour te tenir au courant (d'ici ce soir ou demain matin).

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Je viens de tester ta proposition .... mais quand j'appelle l'activity, je tombe sur une erreur que je ne comprends pas :

    Comprenez vous ce message ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    12-28 20:00:37.685: ERROR/AndroidRuntime(443): FATAL EXCEPTION: main
    12-28 20:00:37.685: ERROR/AndroidRuntime(443): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.template.fra/com.template.fra.activities.RechercheSalResultActivity}: java.lang.NullPointerException
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.os.Handler.dispatchMessage(Handler.java:99)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.os.Looper.loop(Looper.java:123)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.ActivityThread.main(ActivityThread.java:3647)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at java.lang.reflect.Method.invokeNative(Native Method)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at java.lang.reflect.Method.invoke(Method.java:507)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at dalvik.system.NativeStart.main(Native Method)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443): Caused by: java.lang.NullPointerException
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at com.template.fra.activities.RechercheSalResultActivity.traitementDesDonnees(RechercheSalResultActivity.java:110)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at com.template.fra.activities.RechercheSalResultActivity.configListView(RechercheSalResultActivity.java:87)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at com.template.fra.activities.RechercheSalResultActivity.onCreate(RechercheSalResultActivity.java:79)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
    12-28 20:00:37.685: ERROR/AndroidRuntime(443):     ... 11 more


    Je me permets également de vous montrer mon code également .... on ne sait jamais.
    Merci par avance.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    package com.template.fra.activities;
     
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.text.SpannableString;
    import android.util.Log;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import com.template.fra.R;
    import com.template.fra.adapter.PosteAdapter;
    import com.template.fra.bean.Poste;
    import com.template.fra.persistence.PosteDao;
     
    public class RechercheSalResultActivity extends TemplateMenuActivity {
     
        private final PosteDao posteDao = new PosteDao();
    	private ListView lv;
        private PosteAdapter postesAdapter;
        private String fonctionResult;
        private String secteurResult;
        private String info;
        private String mapage1;
        private String mapage2;
        private String mapage3;
        private String mapage4;
        private String mapage5;
     
        private ProgressDialog progressDialog;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.postesresults);
            titleText.setText(getResources()
                    .getString(R.string.labelPosteRecherche2));
     
     
            final Bundle extras = getIntent().getExtras();
            if (extras != null) {
                fonctionResult = extras.getString("fonction");
                secteurResult = extras.getString("secteur");
            }
     
       		configListView();
    	}
     
     
    	private void configListView() {
    		lv = (ListView) this.findViewById(android.R.id.list);
     
     
    		traitementDesDonnees(lv);
     
     
    		lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    			@Override
    			public void onItemClick(AdapterView<?> list, View v, int pos,
    					long id) {
    				Intent detailIntent;
    				detailIntent = new Intent(RechercheSalResultActivity.this,
    						PosteDetailActivity.class);
    				int idPoste = ((Poste) list.getItemAtPosition(pos)).getId();
    				detailIntent.putExtra("idPoste", idPoste);
    				startActivity(detailIntent);
     
    			}
    		});
    	}
     
     
     
     
    private void traitementDesDonnees(final ListView lv) {
     
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
     
    				postesAdapter = new PosteAdapter(RechercheSalResultActivity.this, R.layout.row,
    						posteDao.getPostesAvecCriteres(getApplicationContext(),
    		                        fonctionResult, secteurResult);
    				postesAdapter.notifyDataSetChanged();
     
    				lv.setAdapter(postesAdapter);
     
    				handler.sendEmptyMessage(0);
     
    				// A la fin du traitement, on fait disparaitre notre message
    				progressDialog.dismiss();
    			}
    		}).start();
    	}
     
    	private Handler handler = new Handler() {
    		public void handleMessage(android.os.Message msg) {
    			if(msg.what == 0) {
    				Log.e("TAG", "c'est bon");
    			}
    		};
    	};
    }

  7. #7
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    C'est parce qu'il manque l'initialisation de la progressDialog.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    tu veux dire qu'il me manque le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progressDialog = new ProgressDialog(this);

  9. #9
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    J'ai repris le code de tes méthodes de ton premier post. Donc reprend la même initialisation de la progressdialog qu'il y avait là bas (tu nous avait pas fournis ce code d'init de la progressdialog).
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Merci pour ton aide.

    A présent, j'ai bien le message "chargement en cours qui apparaît" et qui disparaît une fois le chargement réalisé.
    Mais une fois que le message disparait.... l'appli plante.
    Elle plante en fait à l'appelle de cette ligne : lv.setAdapter(postesAdapter);

    ... et je vois derrière le message d'erreur que l'appli revient sur la page précédente.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    package com.template.fra.activities;
     
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.text.SpannableString;
    import android.util.Log;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import com.template.fra.R;
    import com.template.fra.adapter.PosteAdapter;
    import com.template.fra.bean.Poste;
    import com.template.fra.persistence.PosteDao;
     
    public class RechercheSalResultActivity extends TemplateMenuActivity {
     
        private final PosteDao posteDao = new PosteDao();
    	private ListView lv;
        private PosteAdapter postesAdapter;
        private String fonctionResult;
        private String secteurResult;
        private String info;
        private String mapage1;
        private String mapage2;
        private String mapage3;
        private String mapage4;
        private String mapage5;
     
        private ProgressDialog progressDialog;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.postesresults);
            titleText.setText(getResources()
                    .getString(R.string.labelPosteRecherche2));
     
     
            final Bundle extras = getIntent().getExtras();
            if (extras != null) {
                fonctionResult = extras.getString("fonction");
                secteurResult = extras.getString("secteur");
            }
     
       		configListView();
    	}
     
     
    	private void configListView() {
    		lv = (ListView) this.findViewById(android.R.id.list);
     
     
    		traitementDesDonnees(lv);
     
     
    		lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    			@Override
    			public void onItemClick(AdapterView<?> list, View v, int pos,
    					long id) {
    				Intent detailIntent;
    				detailIntent = new Intent(RechercheSalResultActivity.this,
    						PosteDetailActivity.class);
    				int idPoste = ((Poste) list.getItemAtPosition(pos)).getId();
    				detailIntent.putExtra("idPoste", idPoste);
    				startActivity(detailIntent);
     
    			}
    		});
    	}
     
     
     
     
    private void traitementDesDonnees(final ListView lv) {
     
    		progressDialog = new ProgressDialog(this);
    
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
     
    				postesAdapter = new PosteAdapter(RechercheSalResultActivity.this, R.layout.row,
    						posteDao.getPostesAvecCriteres(getApplicationContext(),
    		                        fonctionResult, secteurResult);
    				postesAdapter.notifyDataSetChanged();
     
                                    lv.setAdapter(postesAdapter);
     
    				handler.sendEmptyMessage(0);
     
    				// A la fin du traitement, on fait disparaitre notre message
    				progressDialog.dismiss();
    			}
    		}).start();
    	}
     
    	private Handler handler = new Handler() {
    		public void handleMessage(android.os.Message msg) {
    			if(msg.what == 0) {
    				Log.e("TAG", "c'est bon");
    			}
    		};
    	};
    }

    Le big message d'erreur est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    12-29 11:59:37.929: DEBUG/dalvikvm(135): GC_EXPLICIT freed 89K, 51% free 2941K/5959K, external 2715K/3187K, paused 72ms
    12-29 11:59:45.019: INFO/ActivityManager(69): Starting: Intent { cmp=com.template.fra/.activities.RechercheSalResultActivity (has extras) } from pid 511
    12-29 11:59:46.289: INFO/ActivityManager(69): Displayed com.template.fra/.activities.RechercheSalResultActivity: +1s221ms
    12-29 11:59:47.739: WARN/dalvikvm(511): threadid=12: thread exiting with uncaught exception (group=0x40015560)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511): FATAL EXCEPTION: Thread-13
    12-29 11:59:47.761: ERROR/AndroidRuntime(511): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.view.ViewRoot.checkThread(ViewRoot.java:2932)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.view.ViewRoot.invalidateChild(ViewRoot.java:642)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:668)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.view.View.invalidate(View.java:5279)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.widget.AbsListView.resetList(AbsListView.java:1108)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.widget.ListView.resetList(ListView.java:511)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at android.widget.ListView.setAdapter(ListView.java:440)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at com.template.fra.activities.RechercheSalResultActivity$2.run(RechercheSalResultActivity.java:126)
    12-29 11:59:47.761: ERROR/AndroidRuntime(511):     at java.lang.Thread.run(Thread.java:1019)
    12-29 11:59:47.819: WARN/ActivityManager(69):   Force finishing activity com.template.fra/.activities.RechercheSalResultActivity
    12-29 11:59:48.389: WARN/InputManagerService(69): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@407d0c38
    12-29 11:59:50.539: WARN/KeyCharacterMap(69): No keyboard for id 0
    12-29 11:59:50.539: WARN/KeyCharacterMap(69): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
    12-29 11:59:50.739: ERROR/WindowManager(511): Activity com.template.fra.activities.RechercheSalResultActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4056be40 that was originally added here
    12-29 11:59:50.739: ERROR/WindowManager(511): android.view.WindowLeaked: Activity com.template.fra.activities.RechercheSalResultActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4056be40 that was originally added here
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.view.ViewRoot.<init>(ViewRoot.java:258)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.Dialog.show(Dialog.java:241)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at com.template.fra.activities.RechercheSalResultActivity.traitementDesDonnees(RechercheSalResultActivity.java:115)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at com.template.fra.activities.RechercheSalResultActivity.configListView(RechercheSalResultActivity.java:87)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at com.template.fra.activities.RechercheSalResultActivity.onCreate(RechercheSalResultActivity.java:79)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.os.Handler.dispatchMessage(Handler.java:99)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.os.Looper.loop(Looper.java:123)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at android.app.ActivityThread.main(ActivityThread.java:3647)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at java.lang.reflect.Method.invokeNative(Native Method)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at java.lang.reflect.Method.invoke(Method.java:507)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    12-29 11:59:50.739: ERROR/WindowManager(511):     at dalvik.system.NativeStart.main(Native Method)
    12-29 11:59:51.029: DEBUG/dalvikvm(69): GC_CONCURRENT freed 1014K, 46% free 4509K/8327K, external 2444K/3047K, paused 14ms+15ms

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur Informatique et Développeur Android

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Points : 321
    Points
    321
    Par défaut
    la meilleur méthode je pense dans ce cas est de lancer le progress bar au meme temps avec le thread responsable au chargement de données.
    puis lorsque ton chargement se termine tu teste
    if (progresssbar.isshowin())
    {
    progress.dismiss()
    }

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Bonjour

    Merci tlili_info pour ta proposition de solution.

    Si je comprends bien tu proposes d'essayer d'appeler [ lv.setAdapter(postesAdapter); ] seulement quand [ progress.dismiss() ] ? (commet dans l'ex ci dessous)


    Aurais tu un ex concret à me montrer avec une listview ?
    Merci encore pour ton aide également.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    private void traitementDesDonnees(final ListView lv) {
     
    		progressDialog = new ProgressDialog(this);
    
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
     
    				postesAdapter = new PosteAdapter(RechercheSalResultActivity.this, R.layout.row,
    						posteDao.getPostesAvecCriteres(getApplicationContext(),
    		                        fonctionResult, secteurResult);
    				postesAdapter.notifyDataSetChanged();
     
    					if (progresssbar.isshowin())
    					{
    					progress.dismiss()
    					} 					
                        
    					lv.setAdapter(postesAdapter);			
    				
    					handler.sendEmptyMessage(0);
     
    				// A la fin du traitement, on fait disparaitre notre message
    				//progressDialog.dismiss();
    			}
    		}).start();
    	}

  13. #13
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    essaye un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    private void traitementDesDonnees(final ListView lv) {
     
    		progressDialog = new ProgressDialog(this);
     
    		// On ajoute un message à notre progress dialog
    		progressDialog.setMessage("Chargement en cours");
    		// On affiche notre message
    		progressDialog.show();
     
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
     
    				postesAdapter = new PosteAdapter(RechercheSalResultActivity.this, R.layout.row,
    						posteDao.getPostesAvecCriteres(getApplicationContext(),
    		                        fonctionResult, secteurResult);
    				postesAdapter.notifyDataSetChanged();
    					handler.sendEmptyMessage(0);
     
    			}
    		}).start();
    	}
     
    private Handler handler = new Handler() {
    		public void handleMessage(android.os.Message msg) {
    			if(msg.what == 0) {
    //On actualise la liste avec l'adapter créé : 
    lv.setAdapter(postesAdapter);
     
    		                // A la fin du traitement, on fait disparaitre notre message
    				progressDialog.dismiss();
    			}
    		};
    	};
    Le handler est là pour faire le pont entre le thread de calcul (récupération des infos) et le thread de la GUI.
    Je te laisse consulter le tutoriel sur DVP qui explique comment celà fonctionne si tu le souhaites.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 56
    Points
    56
    Par défaut
    Ca marche !
    Alors là BRAVO.

    Sincèrement, j'avais posté à tout hasard.... mais je ne pensais vraiment pas que l'on aurait pu m'aider sur un tel point.
    Bravo encore aux admins et utilisateurs réguliers qui aident .... votre aide est précieuse !

    Encore merci donc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/10/2012, 12h55
  2. Savoir quand la page est chargée ?
    Par blanchonvincent dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/09/2007, 23h33
  3. [AJAX] Comment savoir quand l'action est terminée
    Par tatayecorp dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/08/2007, 21h28
  4. [javascript]Savoir quand une frame est chargée
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/08/2005, 09h18
  5. Comment savoir quand une JFrame est rafraichie?
    Par mardona dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 19/08/2005, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo