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 :

Erreur NullPointerException DrawerLayout


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut Erreur NullPointerException DrawerLayout
    Salut à tous,

    J'aimerais utiliser un DrawerLayout dans mon application mais j'ai un petit problème.
    Alors mon DrawerLayout est dans un fragment et quand j'utilise la méthode openDrawer ou closeDrawer mon application bug (NullPointerException).
    Je n'ai pas ce problème si mon DrawerLayout est dans une activité mais j'aimerais l'utiliser dans un fragment car toutes mes fenêtres seront composé de 2 fragments (un pour le DrawerLayout et un autre pour les informations)

    Merci d'avance pour votre aide

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Comme toujours, NullPointerException -> on ne peut pas deviner, c'est la StackTrace qui donnera le fautif.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    Voici le StackTrace


    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
    11-11 21:28:19.471: E/AndroidRuntime(15058): FATAL EXCEPTION: main
    11-11 21:28:19.471: E/AndroidRuntime(15058): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.navigationdrawertest/com.example.navigationdrawertest.ActivityDeux}: java.lang.NullPointerException
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.ActivityThread.access$700(ActivityThread.java:151)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.os.Looper.loop(Looper.java:137)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.ActivityThread.main(ActivityThread.java:5293)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at java.lang.reflect.Method.invoke(Method.java:511)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at dalvik.system.NativeStart.main(Native Method)
    11-11 21:28:19.471: E/AndroidRuntime(15058): Caused by: java.lang.NullPointerException
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at com.example.navigationdrawertest.MainActivity.onActivityCreated(MainActivity.java:42)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.Fragment.performActivityCreated(Fragment.java:1703)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:921)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1860)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.Activity.performCreate(Activity.java:5253)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
    11-11 21:28:19.471: E/AndroidRuntime(15058): 	... 11 more
    Mais le problème vient que mon drawerLayout est dans un fragment car si il est dans une activité et que j'utilise openDrawer ou closeDrawer ça fonctionne

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Et qui a-t'il à la ligne 42 de MainActivity ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.example.navigationdrawertest.MainActivity.onActivityCreated(MainActivity.java:42)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    Mon openDrawer()

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Si tu ne nous montre pas l'endroit où tu utilises cette méthode, ça va être difficile de te répondre.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    Ah oui désolé
    Voici le 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
    package com.example.navigationdrawertest;
     
    import android.app.Fragment;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.widget.DrawerLayout;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
     
    public class DrawerFragment extends Fragment{
    	private DrawerLayout mDrawerLayout;
    	private ListView mDrawerList;
     
    	private CharSequence mDrawerTitle;
    	private CharSequence mTitle;
    	private String[] mPlanetTitles;
     
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    		View mainView = inflater.inflate(R.layout.drawer_frag, container, false);
    		return mainView;
     
    	}
     
     
    	public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
     
    		mTitle = mDrawerTitle = getActivity().getTitle();
    		mPlanetTitles = new String[] { "toto", "tutu", "titi" };
    		mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
    		mDrawerList = (ListView) getActivity().findViewById(R.id.left_drawer);
     
    		mDrawerList.setAdapter(new ArrayAdapter<String>(getActivity(),
    				R.layout.drawer_list_item, mPlanetTitles));
    		mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    		mDrawerLayout.openDrawer(mDrawerList); //ça bug ici, si je l'enlève tout fonctionne, ou si je le laisse et que je modifie mon fragment en activité ça fonctionne aussi 
    	}
     
     
    	private class DrawerItemClickListener implements
    			ListView.OnItemClickListener {
    		public void onItemClick(AdapterView<?> parent, View view, int position,
    				long id) {
    			Log.e("CLICK", "Position: " + String.valueOf(position));
    			if (position == 0) {
    				Intent i = new Intent(getActivity(), ActivityDeux.class);
    				i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    				startActivity(i);
    			}
    			else {
    				Intent i = new Intent(getActivity(), ActivityTrois.class);
    				i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    				startActivity(i);
    			}
    		}
    	}
     
    }

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Ben cela veut dire que ton activity ne contient pas de Drawer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); // ici, la valeur est null

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    Merci pour ta réponse, mais comment se fait t'il qu'il soit null ??

    voici mon fichier drawer_frag.xml

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
     
        <LinearLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" />
     
        <ListView
            android:id="@+id/left_drawer"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#111"/>
    </android.support.v4.widget.DrawerLayout>
    Car sans le openDrawer, mon application affiche bien mon drawerLayout :s

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
    Va chercher un Drawer dans l'Activity et non dans le Fragment car getActivity()
    Pourquoi tu ne cherches pas directement dans le Fragment ?

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    J'y ai pensé, j'ai essayé avec un getView(), mais ça n'a pas fonctionné :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
     
    		mTitle = mDrawerTitle = getActivity().getTitle();
    		mPlanetTitles = new String[] { "toto", "tutu", "titi" };
    		mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);
    		mDrawerList = (ListView) getView().findViewById(R.id.left_drawer);
    		mDrawerList.setAdapter(new ArrayAdapter<String>(getActivity(),
    				R.layout.drawer_list_item, mPlanetTitles));
    		mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    		mDrawerLayout.openDrawer(mDrawerList);
    	}

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Il me semble que le callback onActivityCreated est effectué avant onCreateView.
    Essaie de déplacer ton affectation dans le onCreateView.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    Super ça fonctionne, je te remercie énormément pour ton aide

    Voici mon nouveau 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
     
    package com.example.navigationdrawertest;
     
    import android.app.Fragment;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.widget.DrawerLayout;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
     
    public class DrawerFragment extends Fragment{
    	private DrawerLayout mDrawerLayout;
    	private ListView mDrawerList;
     
    	private CharSequence mDrawerTitle;
    	private CharSequence mTitle;
    	private String[] mPlanetTitles;
     
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    		View mainView = inflater.inflate(R.layout.drawer_frag, container, false);
    		mDrawerLayout = (DrawerLayout) mainView.findViewById(R.id.drawer_layout);
    		mDrawerList = (ListView) mainView.findViewById(R.id.left_drawer);
    		return mainView;
     
    	}
     
     
    	public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
     
    		mTitle = mDrawerTitle = getActivity().getTitle();
    		mPlanetTitles = new String[] { "toto", "tutu", "titi" };
    		mDrawerList.setAdapter(new ArrayAdapter<String>(getActivity(),
    				R.layout.drawer_list_item, mPlanetTitles));
    		mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    		mDrawerLayout.openDrawer(mDrawerList);
    	}
     
     
    	private class DrawerItemClickListener implements
    			ListView.OnItemClickListener {
    		public void onItemClick(AdapterView<?> parent, View view, int position,
    				long id) {
    			Log.e("CLICK", "Position: " + String.valueOf(position));
    			if (position == 0) {
    				Intent i = new Intent(getActivity(), ActivityDeux.class);
    				i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    				startActivity(i);
    			}
    			else {
    				Intent i = new Intent(getActivity(), ActivityTrois.class);
    				i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    				startActivity(i);
    			}
    		}
    	}
     
    }
    ps:
    Je vais créer une nouvelle discussion car j'ai besoin de quelques petits conseil sur la conception d'une application avec le drawer layout (navigation drawer)

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    N'hésite pas à marquer ton sujet en Résolu lorsqu'il l'est

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Par défaut
    Voila

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

Discussions similaires

  1. une erreur nullPointerException
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/05/2011, 13h28
  2. Erreur NullPointerException
    Par simaing dans le forum Général Java
    Réponses: 7
    Dernier message: 01/05/2008, 20h00
  3. erreur NullPointerException à l'éxécution
    Par rcober dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 13/03/2008, 10h05
  4. Erreur NullPointerException - Hibernate
    Par elloyeen dans le forum Struts 1
    Réponses: 4
    Dernier message: 30/12/2007, 03h20
  5. Réponses: 3
    Dernier message: 25/04/2007, 14h22

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