Bonsoir, Patrick!
J'ai un grand souci! Je voudrai utilisé un sgbd : SQLite sous Android.
Cependant je me casse la figure, c'est ma troisième tentative depuis que j'avais commencé. C'est toujours en vain.
J'ai suivi toutes les étape du livre l'
Art du développement Android et celle du livre
professional_android_application_development, mais rien n'est ok!
J'ai besoin de votre aide: Voici toutes les classes que j'ai utilisé, où se trouve le problème ?
Si vous avez un exemple qui tourne, pouvez-vous me passer le modèle ?
Classe Contact:
package com.aris.tp_sqlite;
public class Contact {
   private int id;
   private String nom;
   private String numTelephone;
   public Contact() {
   }
   public Contact(String nom, String numTelephone) {
      this.nom = nom;
      this.numTelephone = numTelephone;
   }
   public int getId() {
      return id;
   }
   public void setId(int id) {
     Â
this.id = id;
   }
   public String getNom() {
      return nom;
   }
   public void setNom(String nom) {
      this.nom = nom;
   }
   public String getNumTelephone() {
      return numTelephone;
   }
   public void setNumTelephone(String numTelephone) {
      this.numTelephone = numTelephone;
   }
}
Classe d'accès à la base de données
package com.aris.tp_sqlite;
import java.sql.SQLException;
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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class ContactBD {
  Â
      private static final String NOM_BD ="GestionContact";   // Nom de la base de données
      private static final String TABLE_CONTACT="CONTACTS";     // Nom de la table
      private static final int VERSION_BD = 1;                // Version de la base de données
     Â
      // L'instance de la base qui sera manipulée au travers cette classe
      private SQLiteDatabase maBaseDonnees;
           Â
      // Context de l'application utilisant la BDD
      private final Context context;
  Â
      public static final int NUM_COL_ID = 0;
      public static final String COL_ID = "id";
     Â
      public static final int NUM_COL_NOM = 1;
      public static final String COL_NOM = "nom";
     Â
      public static int NUM_COL_NumTel = 2;
      public static String COL_NUM_TEL ="NumTelephone";
     Â
      // La requête de création de la structure de la base de données.
      private static class contactDBOpenHelper extends SQLiteOpenHelper{
         public contactDBOpenHelper(Context context, String name, CursorFactory factory, int version) {
            super(context, name, factory, version);
         }
        Â
         // Requête de création de la base données
         private static final String CREATION_BD = "CREATE TABLE " +
               TABLE_CONTACT + "("+ COL_ID + " int primary key autoincrement, "
                               + COL_NOM + " text not null, "
                               + COL_NUM_TEL + " text not null " + ");";
         @Override
         public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATION_BD);
           Â
         }
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
             Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion + "to" + newVersion + ", which will destroy all old data");
            Â
             db.execSQL("DRPO TABLE IF EXISTS"+ TABLE_CONTACT + ";");
             onCreate(db);  Â
         }
      }
     Â
      private contactDBOpenHelper dbHelper;
     Â
      public ContactBD(Context _context) {
         context = _context;
         //On crée la BDD et sa table
         this.dbHelper = new contactDBOpenHelper(context, NOM_BD, null, VERSION_BD);
      }
     Â
      public void close(){
         maBaseDonnees.close();
      }
      public void open() throws SQLiteException {
         try{
            maBaseDonnees = dbHelper.getWritableDatabase();
         } catch (SQLiteException ex) {
            maBaseDonnees = dbHelper.getReadableDatabase();
         }
      }
     Â
      // Insertion d'un contact
      public long insertContact(Contact contact){
         //Création d'un ContentValues (fonctionne comme une HashMap)
         ContentValues valeurs = new ContentValues();
              Â
         //on lui ajoute une valeur associée à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
         valeurs.put(COL_NOM, contact.getNom());
         valeurs.put(COL_NUM_TEL, contact.getNumTelephone());
              Â
         //on insère l'objet dans la BDD via le ContentValues
         return maBaseDonnees.insert(TABLE_CONTACT, null, valeurs);
      }
           Â
      // Mise à jour d'un contact
      public int miseAjourContact(int id, Contact contact){
         ContentValues valeurs = new ContentValues();
         valeurs.put(COL_NOM, contact.getNom());
         valeurs.put(COL_NUM_TEL, contact.getNumTelephone());
         return maBaseDonnees.update(TABLE_CONTACT, valeurs, COL_ID + "=" + id, null);
      }
           Â
      // Suppression d'un contact
      public int supprimeContact(int id){
         return maBaseDonnees.delete(TABLE_CONTACT, COL_ID + "=" + id, null);
      }     Â
     Â
      public SQLiteDatabase getMaBaseDonnees() {
         return maBaseDonnees;
      }
      Â
     Â
      // contenu dans la BDD (ici on sélectionne le livre grâce à son nom) ** String nom ** COL_NOM + " LIKE " + nom,
     Â
      // Récupération de tous les concacts
      public Cursor getAllContactCursor(){
         return maBaseDonnees.query(TABLE_CONTACT, new String[] { COL_ID,COL_NOM, COL_NUM_TEL},null, null, null, null, null);
      }
     Â
      //Récupère dans un Curseur les valeurs correspondantes à un contact
      public Cursor getContactCursor(String nom) throws SQLException{
         Cursor resultat = maBaseDonnees.query(true, TABLE_CONTACT, new String[] {COL_ID, COL_NOM, COL_NUM_TEL}, COL_NOM + "=" + nom,
               null, null, null, null, null);
        Â
         if ((resultat.getCount()==0)|| !resultat.moveToFirst()){
            throw new SQLException("Aucun contact pour le nom : " + nom);
         }
         return resultat;
      }
     Â
      // Recupération d'un contact fortement typé
      public Contact getContact(String nom) throws SQLException{
         Cursor cursor = maBaseDonnees.query(true, TABLE_CONTACT, new String[] {COL_ID, COL_NOM, COL_NUM_TEL}, COL_NOM + "=" + nom,
               null, null, null, null, null);
        Â
         if ((cursor.getCount()==0)|| !cursor.moveToFirst()){
            throw new SQLException("Aucun contact pour le nom : " + nom);
         }
        Â
         String mNom = cursor.getString(NUM_COL_NOM);
         String mNumTel = cursor.getString(NUM_COL_NumTel);
        Â
         Contact contact = new Contact(mNom, mNumTel);
        Â
         return contact;
        Â
      }
        Â
}
Classe de l'Activité package com.aris.tp_sqlite;
import java.util.ArrayList;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends Activity {
  Â
   ContactBD contactBD;
   private ListView myListView;
   private EditText myEditText;
   private EditText myEditTextPhone;
   private Button myButton;
   private ArrayList<Contact> contactItems;
   private ArrayAdapter<Contact> aa;
  Â
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
      Â
       myListView = (ListView)findViewById(R.id.myListView);
       myEditText = (EditText)findViewById(R.id.edtNom);
       myEditTextPhone = (EditText) findViewById(R.id.edtNumTel);
       myButton =(Button)findViewById(R.id.bouton);
      Â
       contactItems = new ArrayList<Contact>();
       int resID = R.layout.activity_main;
       aa = new ArrayAdapter<Contact>(this, resID, contactItems);
       myListView.setAdapter(aa);
      Â
       myButton.setOnClickListener(new OnClickListener() {
        Â
         @Override
         public void onClick(View v) {
            Contact newContact;
            newContact = new Contact(myEditText.getText().toString(), myEditTextPhone.getText().toString());
            contactBD.insertContact(newContact);
            updateArray();
            myEditText.setText("");
            myEditTextPhone.setText("");
            aa.notifyDataSetChanged();  Â
         }
      });
       registerForContextMenu(myListView);
      //Création d'une instance de ma classe ContactBD
      contactBD = new ContactBD(this);
   Â
      // On ouvre ou on créer la base de données pour écrire dedans
      contactBD.open();
    Â
      remplirContactListe();
   }
  Â
   Cursor contactListCursor;
  Â
   @SuppressWarnings("deprecation")
   private void remplirContactListe(){
      // Récupère tous les contacts de la base de données
      contactListCursor = contactBD.getAllContactCursor();
      startManagingCursor(contactListCursor);
     Â
      // Mise à jour du tableau
      updateArray();
   }
  Â
   private void updateArray(){
      contactListCursor.requery();
     Â
      contactItems.clear();
     Â
      if (contactListCursor.moveToFirst())
         do{
            String nom = contactListCursor.getString(contactBD.NUM_COL_NOM);
            String numTel = contactListCursor.getString(contactBD.NUM_COL_NumTel);
           Â
            Contact newContact = new Contact(nom, numTel);
            contactItems.add(0, newContact);
         }while(contactListCursor.moveToNext());
        Â
      aa.notifyDataSetChanged();
   }
  Â
  Â
   private void supprimerElement(int index){
      contactBD.supprimeContact(contactItems.size()-index);
      updateArray();
   }
  Â
   @Override
   protected void onDestroy() {
      // On ferme la base de données
      contactBD.close();
      super.onDestroy();
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.activity_main, menu);
       return true;
   }
  Â
}
Le layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
   xmlns:tools="
http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
   <LinearLayout
       android:id="@+id/layout1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       >
      Â
   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
      android:text="@string/nom"
       />
      Â
   <EditText
       android:id="@+id/edtNom"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="text"
   />
  Â
  Â
   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
      android:text="@string/numTel"
       />
  Â
   <EditText
       android:id="@+id/edtNumTel"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="text"
   />
  Â
   </LinearLayout>
   <Button
       android:id="@+id/bouton"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/ajouter"/>
   <ListView
       android:id="@+id/myListView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
   />
    Â
      Â
</LinearLayout>