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 remplissage d'une ListVew avec une BDD


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Par défaut Problème remplissage d'une ListVew avec une BDD
    Bonjour,

    J'ai un petit problème avec une ListView remplie par une bdd SQLite.

    Elle se remplie bien sauf que quand je descend et je remonte j'ai une NullPointException.

    Je ne comprend pas vraiment car je remplit une liste d'objet avec la bdd et je l'ajoute après a la ListView.

    mon code pour charger les objets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DatabaseHandler db = new DatabaseHandler(this);
    lstPushs = db.getAllPushs();
     
    for (BaseMetierPush push : lstPushs) {
    	db.updateVuPush(push.id);
    }
    db.close();
    if (lstPushs.isEmpty()){
            TextView tv =(TextView)findViewById(R.id.base_notification_text_vide);
            tv.setVisibility(View.VISIBLE);
    }
    mon code de remplissage de la ListView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste = (ListView)findViewById(R.id.base_notification_list_push);
    liste.setVisibility(View.VISIBLE);
    BasePushListAdapter adapter = new BasePushListAdapter(this, lstPushs);
    liste.setAdapter(adapter);

  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
    Si tu as un NullPointException c'est que tu as déjà regarder le LogCat.
    C'est ce dernier qui t'indique le numéro de ligne où est générée l'erreur.
    Si tu ne sait pas comment comprendre un logcat, copie-le nous et on t'expliquera.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Par défaut
    le LogCat avec 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    11-14 10:41:38.425: E/AndroidRuntime(836): FATAL EXCEPTION: main
    11-14 10:41:38.425: E/AndroidRuntime(836): java.lang.NullPointerException
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at com.lumiplan.montagne.base.push.BasePushListAdapter.getView(BasePushListAdapter.java:57)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.AbsListView.obtainView(AbsListView.java:1294)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.ListView.makeAndAddView(ListView.java:1727)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.ListView.fillDown(ListView.java:652)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.ListView.fillGap(ListView.java:623)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.widget.ListView.onTouchEvent(ListView.java:3315)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.View.dispatchTouchEvent(View.java:3766)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.os.Looper.loop(Looper.java:123)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at java.lang.reflect.Method.invoke(Method.java:521)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    11-14 10:41:38.425: E/AndroidRuntime(836): 	at dalvik.system.NativeStart.main(Native Method)
    l'erreur vient au niveau de l'adapter mais sur quelque chose qui à déjà été remplis à l'initialisation de la liste.

    le getView de l'adapter (en rouge la ligne de 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
    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
    public View getView(int position, View convertView, ViewGroup parent) {
    		
    		BaseListPushViewHolder holder;
    		
    		if (convertView == null){
    			convertView = inflater.inflate(R.layout.base_list_item_notification	, null);
    			
    			holder = new BaseListPushViewHolder();
    			holder.imgCategorie = (ImageView)convertView.findViewById(R.id.base_popup_list_item_img_type);
    			holder.txtDate = (TextView)convertView.findViewById(R.id.base_popup_list_item_date);
    			holder.txtTitre = (TextView)convertView.findViewById(R.id.base_popup_list_item_titre);
    			holder.txtText = (TextView)convertView.findViewById(R.id.base_popup_list_item_text);
    			
    		}else {
    			holder = (BaseListPushViewHolder)convertView.getTag();
    		}
    		BaseMetierPush push = listPushs.get(position);
    		
    		holder.txtDate.setText(push.date);
    		holder.txtTitre.setText(push.titre);
    		holder.txtText.setText(push.message);
    		
    		if (push.category.equalsIgnoreCase(BaseMetierPush.PUSH_CATEGORY_ALERT)){
    			if (push.lu == BaseMetierPush.MESSAGE_PAS_LU) {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_alertes);
    			}else {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_alertes_gris);
    				holder.txtDate.setTextColor(Color.GRAY);
    				holder.txtTitre.setTextColor(Color.GRAY);
    				holder.txtText.setTextColor(Color.GRAY);
    			}
    		}else if (push.category.equalsIgnoreCase(BaseMetierPush.PUSH_CATEGORY_INFOEVENT)){
    			if (push.lu == BaseMetierPush.MESSAGE_PAS_LU) {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_evenement);
    			}else {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_evenement_gris);
    				holder.txtDate.setTextColor(Color.GRAY);
    				holder.txtTitre.setTextColor(Color.GRAY);
    				holder.txtText.setTextColor(Color.GRAY);
    			}
    		}else if (push.category.equalsIgnoreCase(BaseMetierPush.PUSH_CATEGORY_PROMOTION)){
    			if (push.lu == BaseMetierPush.MESSAGE_PAS_LU) {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_promotion);
    			}else {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_promotion_gris);
    				holder.txtDate.setTextColor(Color.GRAY);
    				holder.txtTitre.setTextColor(Color.GRAY);
    				holder.txtText.setTextColor(Color.GRAY);
    			}
    		}else if (push.category.equalsIgnoreCase(BaseMetierPush.PUSH_CATEGORY_SNOW)){
    			if (push.lu == BaseMetierPush.MESSAGE_PAS_LU) {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_neige);
    			}else {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_neige_gris);
    				holder.txtDate.setTextColor(Color.GRAY);
    				holder.txtTitre.setTextColor(Color.GRAY);
    				holder.txtText.setTextColor(Color.GRAY);
    			}
    		}else{
    			if (push.lu == BaseMetierPush.MESSAGE_PAS_LU) {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_meteo);
    			}else {
    				holder.imgCategorie.setImageResource(R.drawable.base_picto_meteo_gris);
    				holder.txtDate.setTextColor(Color.GRAY);
    				holder.txtTitre.setTextColor(Color.GRAY);
    				holder.txtText.setTextColor(Color.GRAY);
    			}
    		}
    		
    		
    		return convertView;
    	}

  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
    D'après ce que tu indiques, soit
    • push est null
    • holder.txtDate est null

  5. #5
    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
    Dans ce cas, holder OU txtDate OU push est null.
    Mets un breakpoint et regarde.
    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

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 149
    Par défaut
    ok j'ai fais le test et apparemment c'est le holder qui est null mais pourquoi il est null pour celui la mais pas pour les autres?

    faut-il le passer en variable de classe?

  7. #7
    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
    Rajoute un setTag sur ta convertView quand tu la crées, ça devrait aider

    Tu demandes le tag de la convertView, mais tu ne le set jamais
    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: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19
  5. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24

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