Plantage de l'appli par action sur bouton

Résolu/Fermé
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   -  
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

A voir également:

2 réponses

rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   13
 

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

0
kaneagle Messages postés 86525 Date d'inscription   Statut Modérateur Dernière intervention   14 532
 

Bonjour,

Évite les doublons !

La discussion doit se continuer -->> ICI <<--

Merci.

0