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 :

Question de syntaxe pour Intent et passage en paramètre d'activité


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Points : 67
    Points
    67
    Par défaut Question de syntaxe pour Intent et passage en paramètre d'activité
    Bonjour, j'ai un petit soucis de syntaxe sans doute pour changer d'activité en fonction de mon choix dans une liste:

    Donc le code dans ma classe principale donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listViewMap[i].setOnItemClickListener(new MyListViewItemListener(mDataMap.get(i), getActivity()));
    et donc ma classe MyListViewItemListener donne ç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
    package rapport.presse.cim;
     
    import java.util.List;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;
     
    public class MyListViewItemListener implements OnItemClickListener {
    	private List<String> list;
    	private FragmentActivity fragmentActivity;
     
    	public MyListViewItemListener(List<String> list, FragmentActivity activity) {
    		// TODO Auto-generated constructor stub
    		this.list = list;
            this.fragmentActivity = fragmentActivity;
    	}
     
    	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    		// TODO Auto-generated method stub
    		String choix = list.get(position);
    		Bundle mObjetBundle = new Bundle(); //Permet de passer un paramètre à l'autre activité
    		mObjetBundle.putString("choix", choix);
    		Intent t = new Intent(fragmentActivity, Tableau.class); //permet d'appeler la nouvelle activité
    		t.putExtras(mObjetBundle);
    		fragmentActivity.startActivity(t);
    	}
    }
    Je passe donc mon activité en paramètre pour pouvoir fournir celle-ci à la classe Intent.
    Mais apparemment c'est pas vraiment comme ça que je dois faire vu l'erreur:

    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
    12-29 13:32:50.450: E/AndroidRuntime(1056): FATAL EXCEPTION: main
    12-29 13:32:50.450: E/AndroidRuntime(1056): java.lang.NullPointerException
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.content.ComponentName.<init>(ComponentName.java:75)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.content.Intent.<init>(Intent.java:3122)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at rapport.presse.cim.MyListViewItemListener.onItemClick(MyListViewItemListener.java:30)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.widget.AdapterView.performItemClick(AdapterView.java:292)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.widget.AbsListView$1.run(AbsListView.java:3168)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.os.Handler.handleCallback(Handler.java:605)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.os.Looper.loop(Looper.java:137)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at java.lang.reflect.Method.invokeNative(Native Method)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at java.lang.reflect.Method.invoke(Method.java:511)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    12-29 13:32:50.450: E/AndroidRuntime(1056): 	at dalvik.system.NativeStart.main(Native Method)

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Bonjour,

    Ton exception vient de là apparemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mObjetBundle.putString("choix", choix);
    Je pense que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String choix = list.get(position);
    te renvoie une valeur nulle

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Points : 67
    Points
    67
    Par défaut
    Oups j'avais pas vu que j'avais sauté une ligne.
    La ligne 30 c'est le Intent t ^^

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Effectivement ça change beaucoup de choses

    Si tu appels cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listViewMap[i].setOnItemClickListener(new MyListViewItemListener(mDataMap.get(i), getActivity()));
    dans un fragment il faut faire attention au getActivity() qui peut renvoyer NULL tant que l'activité n'a pas été attaché au fragment.

    Il y a la méthodepublic void onAttach(Activity activity) qui peut surement t'aider.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Points : 67
    Points
    67
    Par défaut
    Elle est déjà attachée vu que j'arrive à la lancer et à voyager dans mes listes mais quand je sélectionne un item ça me renvoie cette erreur et l'app plante :s

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Tu as vérifié avec des Logs si elle est bien non NULL?

    Car tu ne te sert de l'activité que quand tu cliques sur une ligne de la ListView, ça me parait normal que ça ne plante pas avant

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Points : 67
    Points
    67
    Par défaut
    Quand je test à la fin de ma boucle si mon activité est null

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(this.fragmentActivity != null){
    			Log.i("test activity", "ok");
    		}else Log.i("test activity", "nonOk");
    Il me dit (et même 2 fois ^^) que c'est ok
    Par contre quand je test dans le constructeur de ma classe MyListViewItemListener en remplaçant par Là j'ai que des null :s

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Sake_reflex Voir le message
    Bonjour,

    Ton exception vient de là apparemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mObjetBundle.putString("choix", choix);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at android.content.Intent.<init>(Intent.java:3122)
    Veut dire que c'est dans le constructeur de Intent.

    Tableau.class correspond bien à une activité déclarée dans le manifest ?

    Erreur de recopie ? ou d'inattention ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public MyListViewItemListener(List<String> list, FragmentActivity activity) {
    		// TODO Auto-generated constructor stub
    		this.list = list;
            this.fragmentActivity = fragmentActivity;
    	}
    parce que là... il fait juste: this.fragmentActivity = this.fragmentActivity (qui est null)

    Si c'est une faute d'inattention: force Eclipse à pondre une erreur si il manque un "this." (ou au moins un warning)... il aurait directement mis un warning sur la valeur (manque 'this.') qui t'aurait mis la puce à l'oreille
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Points : 67
    Points
    67
    Par défaut
    Merci nicroman pour ta clairvoyance ^^
    J'avais en effet fait une erreur d'inattention qui ne pardonnait pas.
    Je vais pouvoir m'attaquer à la suite maintenant ^^

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2015, 16h55
  2. [PHP 5.1] Syntaxe pour passage parametre via une url
    Par chkemp dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2009, 18h57
  3. [C linux makefile] question de syntaxe
    Par Ultros dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 09/04/2004, 07h58
  4. [windows] recherche outils coloration syntax. pour -> htm
    Par hpfx dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 02/10/2003, 01h52
  5. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51

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