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 affichage AlertDialog


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 33
    Par défaut Problème affichage AlertDialog
    Salut,

    Je dev une appli dans laquelle il est nécessaire de s'identifier. Lors de l'identification, le nom et le pass sont envoyés à un serveur qui va vérifier si ils sont correct. Si ce n'est pas le cas, je dois afficher un message disant qu'il y a une erreur d'identification.
    Le problème, c'est que ce que j'ai fais fait planter l'appli.

    Ceci est le morceau de code appelant la méthode que j'ai crée pour afficher l'AlertDialog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	if(reponse.equals("")) {
    		ident.setReponseLue(false);
    		ident.msgErreur("Erreur", "Erreur identification");
    	}
    Et voici le code de la fonction msgErreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public void msgErreur(String titre, String message) {
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		builder.setMessage(message);
    		builder.setTitle(titre);
    		builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int id) {
    				IdentificationActivity.this.finish();
    			}
    		});
    		AlertDialog alert = builder.create();
    		alert.show();
    	}

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Quelle est l'erreur (stacktrace complet avec pointage vers les lignes mises en causes s'il te plaît) ?

    Là, pour le moment, les deux points que je vois :
    • c'est une NullPointerException sur response.equals("")
    • Une exception liée à l'EDT "can't create ... on a thread which have not call Looper.prepare" (quelque chose comme ça), c'est à dire que tu tenterai d'influer sur le thread graphique via un autre thread. Dans ce cas-là, appeler myActivity.runOnUiThread(new Runnable {//code ici});.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 33
    Par défaut
    C'est bien ça c'est une erreur NullPointerException que j'ai sur mon equals. Et elle se répète en boucle vu que j'ai un while.
    Le hic c'est que j'ai beau cherché, je vois pas comment régler le souci

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Pour éviter la NPE, tu peux faire "".equals(reponse);, mais ça ne répondra aucunement à ton besoin (afficher un message d'erreur dans le code d'une mauvaise réponse).
    Fais donc un test if (reponse == null || "".equals(reponse)).

    Pour le possible problème de communication/réponse, impossible de répondre, vu que le code n'est pas là
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 33
    Par défaut
    Alors voila ce que me dis le Logcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    03-27 11:24:57.550: E/IdentificationActivity(2825): S: Error
    03-27 11:24:57.550: E/IdentificationActivity(2825):	java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at android.os.Handler.<init>(Handler.java:121)
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at android.app.Dialog.<init>(Dialog.java:100)
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at android.app.AlertDialog.<init>(AlertDialog.java:96)
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at android.app.AlertDialog$Builder.create(AlertDialog.java:891)
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at projet.viametris.IdentificationActivity.msgErreur(IdentificationActivity.java:92)
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at projet.viametris.ClientThread.run(ClientThread.java:57)
    03-27 11:24:57.550: E/IdentificationActivity(2825): 	at java.lang.Thread.run(Thread.java:1020)
    03-27 11:24:57.560: E/IdentificationActivity(2825): C: Error
    03-27 11:24:57.560: E/IdentificationActivity(2825): java.lang.NullPointerException
    03-27 11:24:57.560: E/IdentificationActivity(2825): 	at projet.viametris.ClientThread.run(ClientThread.java:71)
    03-27 11:24:57.560: E/IdentificationActivity(2825): 	at java.lang.Thread.run(Thread.java:1020)
    Et voici le code complet de ma méthode run() :
    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
    	public void run() {
    		// TODO Auto-generated method stub
    		try {
    			Log.d("IdentificationActivity", "C: Connecting...");
    			Socket socket = new Socket("192.168.58.22", 1234);
    			connected = true;
    			IdentificationActivity ident = (IdentificationActivity)ThreadAppelant;
    			do {
    			if(connected) {
    				try {
    					Log.d("IdentificationAcitivity", "C: Sending Command");
    					PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
    					BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    					out.println("IDENT,"+nom+","+pass);
    					out.flush();
    					Log.d("IdentificationActivity", "C: Sent");
    					if(ThreadAppelant instanceof IdentificationActivity)
    					{
    						reponse = rd.readLine();
    						ident.setReponseConnection(reponse);
    						if(reponse == null || "".equals(reponse)) {
    							ident.setReponseLue(false);
    							ident.msgErreur("Erreur", "Erreur identification");
    						}
    						else {
    							ident.setReponseLue(true);
    						}
    						synchronized(ThreadAppelant) {
    							ThreadAppelant.notify();
    						}
    					}
    				}
    				catch(Exception e) {
    					Log.e("IdentificationActivity", "S: Error", e);
    				}
    			}
    			}while(ident.getReponseConnection().equals(""));
    			socket.close();
    			Log.d("IdentificationAcitivty", "C: Closed");
    		}
    		catch(Exception e) {
    			Log.e("IdentificationActivity", "C: Error", e);
    			connected = false;
    		}
     
    	}

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Gné, hé, hé, seconde erreur prévue aussi :
    Citation Envoyé par Hizin
    Une exception liée à l'EDT "can't create ... on a thread which have not call Looper.prepare" (quelque chose comme ça), c'est à dire que tu tenterai d'influer sur le thread graphique via un autre thread. Dans ce cas-là, appeler myActivity.runOnUiThread(new Runnable {//code ici});.
    Donc, tout ce que tu as à faire, c'est d'encapsuler le code servant à créer la AlertDialog dans la méthode "run()" du Runnable que tu créeras

    Pour la NPE, tu fais un "set" de ta réponse (dans le cas présent, à null), via l'instruction ident.setReponseConnection(reponse);, donc tu as de nouveau une possibilité de NPE à la ligne while(ident.getReponseConnection().equals(""));
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  2. problème affichage image
    Par thealpacino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/05/2005, 13h56
  3. Problème affichage primitive
    Par goutbouyo dans le forum DirectX
    Réponses: 4
    Dernier message: 29/12/2004, 18h25
  4. [Plugin][VE] Problème affichage
    Par sebb84 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/07/2004, 14h50
  5. [DOS] Problème affichage de DOS dans un Memo
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 25/06/2004, 13h31

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