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

Android Discussion :

Problème d'AlertDialog qui ne s'affiche pas


Sujet :

Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut Problème d'AlertDialog qui ne s'affiche pas
    Bonjour,

    Je veux afficher une AlertDialog au lancement de mon application si le GPS est désactivé. Cette AlertDialog préviens l'utilisateur qu'il doit activer le GPS pour utiliser l'application, et s'il accepte, le renvoyer vers le menu des paramètres de localisation.

    Le problème, c'est que cette AlertDialog ne s'affiche pas, j'ai un écran noir qui mouline, pourtant le code de ma fonction d'affichage est bien exécuté.

    Voici mon code :

    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
    @Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
     
    		// Hide the window title.
    		requestWindowFeature(Window.FEATURE_NO_TITLE);
     
    		setContentView(R.layout.main);
    		context = this;
    		clickListener = new MarkerListener();
     
    		locationListener = new LocationListener() {
    			public void onStatusChanged(String provider, int status,
    					Bundle extras) {
    			}
     
    			public void onProviderEnabled(String provider) {
    			}
     
    			public void onProviderDisabled(String provider) {
    			}
     
    			public void onLocationChanged(Location location) {
    				// ... on sauvegarde la position
    				myLoc = location;
     
    				}
    			}
    		};
     
    		locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    		if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    			System.out.println("GPS désactivé"); // S'affiche bien
    			showDialog(GPS_DIALOG);
    		}
     
    		myLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    		locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000,
    				3, locationListener);
     
    		while (myLoc == null) {
    			// Wait for a not-null location
    		}
    	}
     
    	@Override
    	protected Dialog onCreateDialog(int id) {
    		Dialog dialog;
     
    		switch(id) {
    			case GPS_DIALOG:
    				AlertDialog.Builder builder = new AlertDialog.Builder(this);
    				builder.setMessage("Le GPS doit être activé pour pouvoir utiliser ce module.");
    				builder.setCancelable(false);
    				builder.setPositiveButton("Activer le GPS",
    						new DialogInterface.OnClickListener() {
    							public void onClick(final DialogInterface dialog,
    									final int id) {
    								startActivity(new Intent(
    										Settings.ACTION_LOCATION_SOURCE_SETTINGS));
    							}
    						});
    				builder.setNegativeButton("Quitter le module",
    						new DialogInterface.OnClickListener() {
    							public void onClick(final DialogInterface dialog,
    									final int id) {
    								dialog.cancel();
    								finish();
    							}
    						});
    				dialog = builder.create();
    				break;
     
    			default:
    				dialog = null;
    		}
     
    		return dialog;
    	}
    Savez-vous d'où le problème peut venir et comment le résoudre ?

    Merci d'avance, cordialement,

    Aenur56

  2. #2
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 592
    Points : 18 498
    Points
    18 498
    Par défaut
    Commence par mettre un System.out pour savoir si la méthode est bien appelé.

    Ensuite peut être qu'il manque :
    Ou quelque chose comme ça.

    Edit :
    Ah non tu utilises protected Dialog onCreateDialog(int id) je viens de rencontrer ça, c'est étrange et apparemment c'est deprecated, en plus ça fait des leaks...

    Du coup c'est showDialog(0); mais t'as du le mettre.

    Désolé je ne peux pas t'aider.
    Keith Flint 1969 - 2019

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    L'approche préconisée par Google (depuis que showDialog a été deprecated) est d'utiliser des DialogFramgent

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Je ne peux pas utiliser les fragments, je suis en API niveau 8+ (android 2.2+) et les fragments ne sont dispos qu'à partir de l'API 11.

    Sinon, j'ai déjà essayé les System.out.println() dans la méthode et elle est bien appelée.

    J'ai aussi déjà essayé l'approche avec dialog.show(), le résultat est le même :/

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Pour utiliser les Fragments et tout ce qui en découle sur les versions antérieures d'Android je te conseille vivement d'utiliser la librairie ActionBarSherlock. (Elle te permet aussi d'accéder à l'actionbar, très pratique et de plus en plus utilisée)

    Tu va certes passer une heure ou deux maximum à comprendre son fonctionnement mais tu en gagnera énormément en confort.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Merci, je vais y jeter un oeil

    Mais bon c'est tout de même anormal que la boite de dialogue ne s'affiche pas et j'aimerais bien savoir d'où ça provient

  7. #7
    Membre habitué Avatar de linked
    Profil pro
    Développeur Android
    Inscrit en
    Mai 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Mai 2008
    Messages : 88
    Points : 133
    Points
    133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (myLoc == null) {
    			// Wait for a not-null location
    		}
    Tant que cette boucle tourne, ton Dialog ne sera pas affiché car il faut que ton UI Thread arrive au bout de son exécution pour l'afficher. Je pourrais pas te dire en détails le pourquoi du comment mais tant que tu a un truc qui mouline, ton Dialog ne sera pas affiché.

    Il faut revoir ta façon de faire et changer un peu la logique de ton code pour que d'un coté ça puisse afficher le dialog en n'ayant rien qui "mouline" et de l'autre coté (un autre Thread ?) le bout de code qui mouline et ne bloque plus le UI Thread.
    Applications et jeux gratuits sur http://www.kamaxandroid.com

  8. #8
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 592
    Points : 18 498
    Points
    18 498
    Par défaut
    Moi je créer et j'affiche mes dialog dans la méthode qui est appelé lors de l'appuie.

    Ce n'est surement pas la meilleure méthode, il faudrait que je me renseigne sur cette histoire de fragment.
    Keith Flint 1969 - 2019

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    En effet, j'ai revu mon code de manière à virer la boucle et ça fonctionne nikel

    Merci beaucoup, problème résolu !

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

Discussions similaires

  1. [MySQL-5.6] Problème de résultat qui ne s'affiche pas
    Par casa43 dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/06/2014, 11h20
  2. Problème de site qui ne s'affiche pas
    Par kami441 dans le forum Apache
    Réponses: 5
    Dernier message: 12/01/2011, 18h46
  3. [MySQL] Problème de code qui ne s'affiche pas
    Par Santcho dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/06/2010, 10h37
  4. Problème avec un VBO qui ne s'affiche pas
    Par shenron666 dans le forum OpenGL
    Réponses: 1
    Dernier message: 28/10/2007, 18h55

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