Plantage de l'appli par action sur bouton
Résolu/Fermékaneagle Messages postés 86525 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je code une appli avec android studio et java.
J'ai codé une Base de donnée SQLite.
Quand je clique sur le bouton insérer les datas mon appli plante.
Le message d'erreur logcat ci-dessous:
Attempt to invoke virtual method 'boolean com.example.rtension3.
SQLiteDataBaseHelper.insertData
(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)'
on a null object reference
Mon extrait de code 2 méthodes:
SQLiteDataBaseHelper
package com.example.rtension3; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; //déclarations de la BDD public class SQLiteDataBaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "Tensions.db"; public static final String TABLE_NAME = "les_releves"; public static final String COL_1 = "ID"; public static final String COL_2 = "JOUR"; public static final String COL_3 = "PERIODE"; public static final String COL_4 = "SYST"; public static final String COL_5 = "DIAS"; public static final String COL_6 = "PULS"; //contructeur rempli public SQLiteDataBaseHelper(@Nullable Context context) { super(context, DATABASE_NAME, null, 1); } //méthode de création de la table //attention à mettre un espace derrière table @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + "JOUR TEXT, PERIODE TEXT, SYST TEXT, DIAS TEXT, PULS TEXT)"); onCreate(db); }//fin méthode onCreate //supprime et brecré la table pour la mettre à jour @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);//attention à l'espace à mettre derrière EXISTS onCreate(db); } //méthode qui insère les données public boolean insertData(String jour, String periode, String syst, String dias, String puls){ SQLiteDatabase db = this.getWritableDatabase(); //ouvre la table en écriture ContentValues contentValues = new ContentValues();//cré l'objet contentvalues contentValues.put(COL_2,jour); contentValues.put(COL_3, periode); contentValues.put(COL_4, syst); contentValues.put(COL_5, dias); contentValues.put(COL_6, puls); long result = db.insert(TABLE_NAME, null, contentValues); return result != -1; } public Cursor crerColonne(){ SQLiteDatabase db = this.getWritableDatabase(); return db.rawQuery("SELECT ID as id, JOUR, PERIODE, SYST, DIAS, PULS, * FROM les_releves", null); } //méthode pour supprimer une ligne public void supprime_ligne(long id){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_NAME, "id = ?", new String[] {Integer.toString((int) id) }); } //fonction pour supprimer toutes les données de la BDD public void deleteAll(){ SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("DELETE FROM " +TABLE_NAME);//attention à toujours mettre un espace derrière from } //méthode pour afficher toutes les données public Cursor Toute_lesDatas(){ SQLiteDatabase db = this.getWritableDatabase(); return db.rawQuery("SELECT ID as_id, * FROM les_releves ORDER BY JOUR", null); } }//fin class SQLiteDataBaseHelper
ma méthode GestionBdd
package com.example.rtension3; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; import androidx.annotation.RequiresApi; public class GestionBdd extends Activity { SQLiteDataBaseHelper db; //déclaration de l'objet base de données String[]lesJours = {"Jours","Jour1", "jour2", "jour3"};//déclaration du tableau pour les jours //déclaration du tableau pour les periodes de prise de tension String[]lesPeriodes = {"Periodes","matin1","matin2", "matin3", "soir1", "soir2", "soir3"}; //déclaration des variables de classe pour obtenir les différents jours et périodes //public static String varJour; //public static String varperiode; //déclaration des objets widget on donne un nom de variable Spinner choixDuJour; Spinner selectionDeLaPeriode; EditText valeurSyst; EditText diasValeur; EditText pulseValeur; Button clickEnregistrer; Button lanceBdd; Button supprimeData; Button revenirAccueil; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);//initialisation de la création setContentView(R.layout.gestion_des_donnees);//affichage du layout créé en xml //récupération des différents widgets choixDuJour = findViewById(R.id.spinnerjour); selectionDeLaPeriode = findViewById(R.id.spinnerperiode); valeurSyst = findViewById(R.id.editTextSyst); diasValeur = findViewById(R.id.editTextDias); pulseValeur = findViewById(R.id.editTextPulse); clickEnregistrer = findViewById(R.id.EnregisterDonnees); lanceBdd = findViewById(R.id.AffichelaBDD); supprimeData = findViewById(R.id.SupprimerTout); revenirAccueil = findViewById(R.id.RetourAccueil); //*******************mise en page du toastpour message à l'écran***************** Context context = getApplicationContext(); CharSequence text ="ATTENTION remplir tout avant de cliquer sur enregistrer !";//message int duration = Toast.LENGTH_SHORT;//duréede l'affichage du toast Toast toast = Toast.makeText(context, text, duration); toast.setGravity(Gravity.LEFT,40, 850);//position sur l'écran du toast toast.show(); //creer un ArrayAdapter instance concernant les jours, on appelle le tableau string lesJours final ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.spinner_item, lesJours ); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //paramètres du Arrayadapter da du spinner choixDuJour.setAdapter(adapter1); //creer un ArrayAdapter instance concernant les periodes, on appelle le tableau string lesPeriodes final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, R.layout.spinner_item, lesPeriodes ); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //paramètres du Arrayadapter da du spinner selectionDeLaPeriode.setAdapter(adapter2); //on code un ecouteur sur le bouton (RetourAccueil = revenirAccueil) revenirAccueil.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ Intent intent = null; intent = new Intent(getBaseContext(), MainActivity.class);//appel de l'activitée GestionBdd startActivity(intent); }//fin de la méthode onclick });//fin de l'écouteur AddData(); //appel de la méthode AddData pour ppeupler la BDD crée }//fin de onCreate public void AddData() { clickEnregistrer.setOnClickListener(new View.OnClickListener() { //@Override //insertion de nouveaux enregistremnts par click sur le bouton public void onClick(View view) { //appel de la fonction insertData boolean isInserted = db.insertData( choixDuJour.getSelectedItem().toString(),//relation avec les spinners pour enregistrer selectionDeLaPeriode.getSelectedItem().toString(), valeurSyst.getText().toString(), diasValeur.getText().toString(), pulseValeur.getText().toString()); //déclenchement du toast pour vérifier s'il y a insertion des données. if (isInserted) { Toast.makeText(GestionBdd.this, "Les données sont insérées avec succès", Toast.LENGTH_SHORT).show(); } else Toast.makeText(GestionBdd.this, "Les données ne sont pas insérées", Toast.LENGTH_SHORT).show(); }//fin de onClick });// fin de clickEnregistrer et fermer paranthèse de new View ...etc... }//fin de la méthode addData }//fin class GestionBdd
J'ai vainement recherché sur le net sans succès
Merci pour votre aide
cordialement
Windows / Firefox 134.0
- Plantage de l'appli par action sur bouton
- Action - Guide
- Télécharger film d'action gratuitement et rapidement - Télécharger - TV & Vidéo
- Concurrent action - Guide
- Appli miroir - Guide
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
2 réponses
Bonsoir,
J'ai un peu rectifié mon code et voici un nouveau message d'erreur.
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "tablereleves": syntax error (code 1):
Malgré que j'ai changé le nom de la table le message d'erreur persiste.
public static final String TABLE_NAME = "releves";
Vraiment je ne comprend pas ci-dessus la modification du nom de table
Merci pour votre aide
cordialement