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 sqlite


Sujet :

Android

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Erreur NullpointerException sqlite
    le code s'execute avant que j'ajoute
    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
     
     public ArrayList<Societe> rechbd(String a,String b,int d){
      	c=bdd.query(TABLE_SOCIETE, null, COLONNE_DOMAINE+" LIKE ?",new String[]{a}, null, null, null);
      	if(c==null)
      	{
      		Log.i("Errrrroe", "No one");
      	}
      	ArrayList<Societe> t=new ArrayList<Societe>();
      	if(c.getCount()==0)
      	{
      		return null;
      	}
      		c.moveToFirst();
      	do{
      		Societe s=new Societe();
      	    s.setNom(c.getString(NOM_ID));
      		s.setTel(c.getString(TEL_ID));
      		s.setAdresse(c.getString(ADR_ID));
      		s.setImage(c.getInt(IMGG_ID));
     
      		t.add(s);    
      		}
      	while(c.moveToNext());
     
      	c.close();
      	return t;
     
     }
    plus précisament cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c=bdd.query(TABLE_SOCIETE, null, COLONNE_DOMAINE+" LIKE ?",new String[]{a}, null, null, null);

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
     
    package com.example.bdd;
     
    import java.util.ArrayList;
     
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListView;
    import android.widget.Toast;
     
    public class BDDActivity extends Activity {
     
    	     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SocieteBD bd=new SocieteBD(this);
            bd.open();
            bd.removeSociete();
           Log.i("place", "0");
            bd.insertSociete(new Societe("Tunisiana","Tunis","réseau et télcommunication",0x7f020002,30,"2212000","adr1"));
            Log.i("place", "00");
            bd.insertSociete(new Societe("Tunisiana","Tunis","maintenance informatique",0x7f020002,60,"2212111","adr2"));
             setContentView(R.layout.activity_bdd);
             ArrayList<Societe> t=bd.rechbd("Tunis", "", 60);
             Log.i("place", "1");       
     
            listbdview ls=new listbdview(t, this);
            Log.i("place", "2");
            ListView list=(ListView)findViewById(R.id.ListView01);
            list.setAdapter(ls);
     
            bd.close();
     
        }
     
     
        //---------------classe MyBD--------------------
        class MyBD extends SQLiteOpenHelper
        {private static final String TABLE_SOCIETE = "table_societe";
        private static final String COLONNE_ID = "id";
    	private static final String COLONNE_NOM = "nom";
    	private static final String COLONNE_DOMAINE = "domaine"; 
    	private static final String COLONNE_REGION="region";
    	private static final String COLONNE_IMGG="image";
    	private static final String COLONNE_TEL= "tel";
    	private static final String COLONNE_ADR= "adresse";
    	private static final String COLONNE_DUR= "durée";
    	private static final String REQUETE_CREATION_BD = "CREATE TABLE "+TABLE_SOCIETE+" ( "+COLONNE_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLONNE_NOM+" TEXT NOT NULL, "+COLONNE_DOMAINE+" TEXT NOT NULL, "+COLONNE_REGION+" TEXT NOT NULL, "+COLONNE_IMGG+" INTEGER, "+COLONNE_TEL+"  TEXT NOT NULL, "+COLONNE_ADR+" TEXT NOT NULL, "+COLONNE_DUR+" INTEGER);";
     
     
    		public MyBD(Context context, String name, CursorFactory factory,
    				int version) {
    			super(context, name, factory, version);
     
    		}
     
    		@Override
    		public void onCreate(SQLiteDatabase db) {
    			db.execSQL(REQUETE_CREATION_BD);
     
    		}
     
    		@Override
    		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     
    			db.execSQL("DROP TABLE " + TABLE_SOCIETE + ";");
        		onCreate(db);	
    		}
     
        }
        //-------------Classe Societe-----------------
       public class Societe
        {
        private int id;
        private String nom;
        private String region;
        private String domaine;
        private int image;
        private int duree;
        private String tel;
        private String adresse;
        public Societe(){
     
        }
     
        public Societe(String b,String c,String d,int i,int e,String g,String h)
        {
        nom=b;region=c;domaine=d; image=i;tel=g;adresse=h;duree=e;
        System.out.println("constructeur societe");
     
        }
     
    	public int getId() {
    		return id;
    	}
     
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getRegion() {
    		return region;
    	}
     
    	public void setRegion(String region) {
    		this.region = region;
    	}
     
    	public String getDomaine() {
    		return domaine;
    	}
     
    	public void setDomaine(String domaine) {
    		this.domaine = domaine;
    	}
     
    public void setImage(int i)
    {image=i;
     
    }
     
    public int getDuree()
    {
    	return duree;
    }
     
    public void setDuree(int i)
    {duree=i;
     
    }
     
    public int getImage()
    {
    	return image;
    }
     
     
    public String getTel() {
    	return tel;
    }
     
    public void setTel(String tel) {
    	this.tel=tel;
    }
    public String getAdresse() {
    	return adresse;
    }
     
    public void setAdresse(String adresse) {
    	this.adresse=adresse;
    }
     
        }
     
     
      //-------------Classe SocieteBD qui étend de MyBD -----------------
        class SocieteBD{
        	private static final int VERSION_BDD = 1;
        	private static final String NOM_BDD = "sdb.db";
        	private static final String TABLE_SOCIETE = "table_societe";
        	private static final String COLONNE_ID = "id";
        	private static final String COLONNE_NOM = "nom";
        	private static final String COLONNE_DOMAINE = "domaine"; 
        	private static final String COLONNE_REGION= "region";
        	private static final String COLONNE_IMGG= "image";
        	private static final String COLONNE_TEL= "tel";
        	private static final String COLONNE_ADR= "adresse";
        	private static final String COLONNE_DUR= "durée";
        	private static final int ID_ID=0;
        	private static final int NOM_ID=1;
            private static final int DOMMAINE_ID=2;
            private static final int REGION_ID=3;
            private static final int IMGG_ID=4;
            private static final int TEL_ID=5;
            private static final int ADR_ID=6;
            private static final int DUR_ID=7;
            private SQLiteDatabase bdd;
        	private Cursor c;
        	private MyBD bd;
        public SocieteBD(Context con){
      bd=new MyBD(con,NOM_BDD, null,VERSION_BDD);
     
        }
     
        private Societe cursorToSociete() {
        	// Si la requête ne renvoie pas de résultat.
        	if (c.getCount() == 0)
        	return null;
        	c.moveToFirst();
        	Societe s=new Societe();
        	// Extraction des valeurs depuis le curseur.
     
        	s.setNom(c.getString(NOM_ID));
        	s.setDomaine(c.getString(DOMMAINE_ID));
        	s.setRegion(c.getString(REGION_ID));
        	s.setImage(c.getInt(IMGG_ID));
        	s.setTel(c.getString(TEL_ID));
        	s.setAdresse(c.getString(ADR_ID));
        	s.setDuree(c.getInt(DUR_ID));
        	// Ferme le curseur pour libérer les ressources.
        	c.close();
        	return s;
        	}
     
        public ArrayList<Societe> listerbd(){
        	c=bdd.query(TABLE_SOCIETE, null, null, null, null,null,null);
        	ArrayList<Societe> t=new ArrayList<Societe>(c.getCount());
        	if(c.getCount()==0)
        	{
        		return null;
        	}
        		c.moveToFirst();
        	do{
        		Societe s=new Societe();
        	    s.setNom(c.getString(NOM_ID));
        		s.setAdresse(c.getString(ADR_ID));
        		s.setImage(c.getInt(IMGG_ID));
        		s.setTel(c.getString(TEL_ID));
        		t.add(s);    }
        	while(c.moveToNext());
     
        	c.close();
        	return t;
     
        }
     
      public void open() 
      {
    	  bdd = bd.getWritableDatabase();
     
    	  }
      public void close() {
    	  bdd.close();
    	  }
      public SQLiteDatabase getBaseDonnees() {
    	  return bdd;
    	  }
     
      public Societe getSociete(){
    	  c=bdd.query(TABLE_SOCIETE, null, null, null, null,null,null);
     
    	  return cursorToSociete();
      }
     
      public long insertSociete(Societe s){
    	  ContentValues v=new ContentValues();
     
    	  v.put(COLONNE_NOM, s.getNom());
    	  v.put(COLONNE_DOMAINE, s.getDomaine());
    	  v.put(COLONNE_REGION, s.getRegion());
    	  v.put(COLONNE_IMGG, s.getImage());
    	  v.put(COLONNE_TEL, s.getTel());
    	  v.put(COLONNE_ADR, s.getAdresse());
    	  v.put(COLONNE_DUR, s.getDuree());
    	  return bdd.insert(TABLE_SOCIETE, null, v);
     
        }
      public int updateSociete(int id, Societe s) {
    	  ContentValues val = new ContentValues();
    	  val.put(COLONNE_NOM, s.getNom());
    	  return bdd.update(TABLE_SOCIETE, val, COLONNE_ID+"="+id, null);
    	  }
      public int removeSociete() {
    	  return bdd.delete(TABLE_SOCIETE, null, null);
    	  }
     
      public ArrayList<Societe> rechbd(String a,String b,int d){
      	c=bdd.query(TABLE_SOCIETE, null, COLONNE_DOMAINE+" LIKE ?",new String[]{a}, null, null, null);
      	if(c==null)
      	{
      		Log.i("Errrrroe", "No one");
      	}
      	ArrayList<Societe> t=new ArrayList<Societe>();
      	if(c.getCount()==0)
      	{
      		return null;
      	}
      		c.moveToFirst();
      	do{
      		Societe s=new Societe();
      	    s.setNom(c.getString(NOM_ID));
      		s.setTel(c.getString(TEL_ID));
      		s.setAdresse(c.getString(ADR_ID));
      		s.setImage(c.getInt(IMGG_ID));
     
      		t.add(s);    
      		}
      	while(c.moveToNext());
     
      	c.close();
      	return t;
     
      }
     
        }}
    classe listbdview
    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
     
    package com.example.bdd;
    import java.util.ArrayList;
     
    import com.example.bdd.BDDActivity.Societe;
     
    import android.content.Context;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
     
    public class listbdview extends BaseAdapter {
    	private ArrayList<Societe> b;
    	private Context c;
    	private LayoutInflater l;
    	public listbdview(ArrayList<Societe> b,Context c)
    	{
    	this.b=b;
    	this.c=c;
    	l=LayoutInflater.from(c);
    	}
     
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return b.size();
    	}
     
    	public Object getItem(int arg0) {
    		// TODO Auto-generated method stub
    		return b.get(arg0);
    	}
     
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return position;
    	}
     
    	private static class viewHolder{
    		ImageView t1;
    		TextView t2;
    		TextView t3;
    		TextView t4;
    	}
    	public View getView(int position, View convertView, ViewGroup parent) {
    		viewHolder holder;
    		if(convertView==null){
    		convertView =l.inflate(R.layout.options_lay, null);
    		holder=new viewHolder();
    		holder.t1=(ImageView)convertView.findViewById(R.id.im);
    		holder.t2=(TextView)convertView.findViewById(R.id.t1);
    		holder.t3=(TextView)convertView.findViewById(R.id.t2);
    		holder.t4=(TextView)convertView.findViewById(R.id.dist);
    		convertView.setTag(holder);
    		}
    		else{
    		holder=(viewHolder) convertView.getTag();}
     
     
    		holder.t1.setImageResource(b.get(position).getImage());
    		holder.t2.setText(b.get(position).getNom());
    		holder.t3.setText("Adresse : "+b.get(position).getAdresse()+" | Tél:"+b.get(position).getTel());
    		holder.t4.setText("500 Km");
    		//String ch=String.valueOf(b.get(position).getImage());
    	return convertView;
    	}}
    Erreur:


    j'arrive pas à la résoudre

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    voici le lien de l image si elle ne s'affiche pas

    http://www.imagup.com/data/1160135670.html

  3. #3
    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
    bd.rechbd("Tunis", "", 60); renvoit null
    't' est null....
    'b' est null dans listbdview
    => NPE sur le getCount()
    • ctrl+A , ctrl+siftt+F dans Eclipse, ca aidera un peu
    • Utiliser les noms CamelCase pour les classes et types (ListBDView par exemple), mais plus important utiliser un nom cohérent (ListBDView n'est pas une View, mais un Adapter => ListBDAdapter)
    • Ne jamais utiliser des noms de variables à une seule lettre (exception éventuelle pour les boucles simples genre for(int i=0;(i < ...);++i)
      Par exemple:
      t = listOfSocietes
      Ceci est d'autant plus vrai pour les variables "membres".
    • Optionnel, mais c'est une bonne manière pour programmer tranquille: toujours protéger son code.... Ainsi dans listbdview, on l'initialise avec b (array) et c (context)... Ou on accepte que les valeurs soient nulles, et dans ce cas, toute utilisation de b doit avoir un joli "if (b != null) ...." soit non, et dans ce cas le construction doit avoir un joli assert genre: "if (b == null) throw new IllegalArguementException(...)"
      Cela peut être un mix des deux d'ailleurs (context jamais null, b peut être null).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    le c.count() retourne 0 donc
    c=bdd.query(TABLE_SOCIETE, null, COLONNE_DOMAINE+" LIKE ?",new String[]{a}, null, null, null);
    ne retourne aucun enregistrement dans le curseur donc le probléme c'est dans le query();
    normalement c'est syntaxiquement juste ?? non?

  5. #5
    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
    Que ce soit juste ou non, il faut gérer le cas....
    C'est bien que la requête ne soit pas juste.... ca permet de trouver les bugs

    Maintenant si j'imagine correctement ce que tu comptes faire, non ce n'est pas juste....
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from matable where colonne like 'toto'
    est identique à
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from matable where colonne = 'toto'
    (modulo les upper-case/lower-case)


    Je pense que ce que tu veux c'est:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from matable where colonne like '%toto%'
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    bon c'est une erreur syntaxique
    voila le corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c=bdd.query(TABLE_SOCIETE, null, COLONNE_REGION+" LIKE ?",new String[]{a}, null, null, null);
    maintenant sa marche

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

Discussions similaires

  1. erreur requete SQlite
    Par viking1404 dans le forum SGBD
    Réponses: 3
    Dernier message: 03/05/2009, 23h39
  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