Partage
  • Partager sur Facebook
  • Partager sur Twitter

KOTLIN PROBLEME CURSEUR

    21 juin 2022 à 21:59:58

    Bonsoir, 

    Actuellement entrain d'essayer de developper une petite application android, j'essaie de faire une sorte de dictionnaire franco n'importe quoi qui permettrait justet en fait de stocker des mots en français et leur traduction dans n'importe quelle langue. Je commence de mieux en mieux a comprendre le KOTLIN (n'ayant jamais fait de java avant c'était un peu rude). Sauf que je suis actuellement confronté au probleme suivant. Ma page pour rechercher un mot dans ma base de données SQLite  possède un bouton qui quand on clique dessus appelle des fonctions censées récupérées les traductions. Android studio me renvoie cette erreur au moment de cliquer sur le bouton "  android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0". 

        fun recup_id_fr(mot: String): Int {
            val db = this.readableDatabase
            val query = db.rawQuery("select id from francais where mot_fr= ?", arrayOf(mot))
        /*
            if( query != null && query.moveToFirst() ){
                query.moveToFirst()
                return query.getInt(0)
            }else{
                return 0
            }
    */
            query.moveToFirst()
            return query.getInt(0)
        }
    

    Voici la fonction concernée (ce probleme est certainement aussi le même sur mes autres fonctions du même genre). Je comprends donc que mon curseur query est vide et ne contient pas de résultat après ma requete, pourtant je pense avoir fait correctement mon lien avec ma base de données que voici : DBHelper.kt

    package com.release.gfg1
    
    import android.content.ContentValues
    import android.content.Context
    import android.database.sqlite.SQLiteDatabase
    import android.database.sqlite.SQLiteOpenHelper
    
    class DBHelper(context: Context, factory: SQLiteDatabase.CursorFactory?) :
        SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION) {
    
        // below is the method for creating a database by a sqlite query
        override fun onCreate(db: SQLiteDatabase) {
            // below is a sqlite query, where column names
            // along with their data types is given
    
            val query = ("CREATE TABLE " + FR + " ("
                    + ID_COL + " INTEGER PRIMARY KEY, " +
                    MOT_FR + " TEXT" +
                     ")")
    
            val query2 = ("CREATE TABLE " + NAP + " ("
                    + ID_COL + " INTEGER PRIMARY KEY, " +
                    MOT_FR + " TEXT" +
                    ")")
            // we are calling sqlite
            // method for executing our query
            db.execSQL(query)
            db.execSQL(query2)
        }
    
        override fun onUpgrade(db: SQLiteDatabase, p1: Int, p2: Int) {
            // this method is to check if table already exists
            db.execSQL("DROP TABLE IF EXISTS " + FR)
            onCreate(db)
        }
    
        // This method is for adding data in our database
        fun addmot(mot_fr: String, mot_nap : String){
    
            // below we are creating
            // a content values variable
            val values = ContentValues()
    
            // we are inserting our values
            // in the form of key-value pair
            values.put(MOT_FR, mot_fr)
            val db = this.writableDatabase
            db.insert(FR, null, values)
    
    
            values.put(MOT_NAP, mot_nap)
    
    
            // here we are creating a
            // writable variable of
            // our database as we want to
            // insert value in our database
            val db2 = this.writableDatabase
    
            // all values are inserted into database
            db2.insert(NAP, null, values)
    
            // at last we are
            // closing our database
            db.close()
        }
    
    
        fun recup_id_fr(mot: String): Int {
            val db = this.readableDatabase
            val query = db.rawQuery("select id from francais where mot_fr= ?", arrayOf(mot))
        /*
            if( query != null && query.moveToFirst() ){
                query.moveToFirst()
                return query.getInt(0)
            }else{
                return 0
            }
    */
            query.moveToFirst()
            return query.getInt(0)
        }
    
    
        fun recup_id_nap(mot: String): Int {
            val db = this.readableDatabase
            val query = db.rawQuery("select id from nap where mot_nap= ?", arrayOf(mot))
            query.moveToFirst()
            return query.getInt(1)
        }
    
    
        // below method is to get
        // all data from our database
        open fun trad_fr(id: Int): String? {
            val db = this.readableDatabase
            val query = db.rawQuery("select mot_fr from francais where id=$id", null)
    
            if( query != null && query.moveToFirst() ){
                query.moveToFirst()
                return query.getString(0)
            }else{
                return "pasouf"
            }
    
    
        }
    
        fun trad_np(id: Int): String? {
            val db = this.readableDatabase
            val query  = db.rawQuery("select mot_nap from nap where id=$id", null)
            query.moveToFirst()
            return query.getString(0)
        }
    
    
        fun ajout(mot_fr: String, mot_nap: String) {
            val db = this.readableDatabase
            val query = db.rawQuery("INSERT INTO nap VALUES(0, ?)", arrayOf(mot_nap))
            val query2 = db.rawQuery("INSERT INTO francais VALUES(0, ?)", arrayOf(mot_fr))
        }
    
    
        companion object{
            // here we have defined variables for our database
    
            // below is variable for database name
            private val DATABASE_NAME = "napo.sql"
    
            // below is the variable for database version
            private val DATABASE_VERSION = 1
    
            // below is the variable for table name
            val FR = "francais"
            val NAP = "nap"
            // below is the variable for id column
            val ID_COL = "id"
    
            // below is the variable for name column
            val MOT_FR = "mot_fr"
    
            // below is the variable for age column
            val MOT_NAP = "mot_nap"
        }
    }
    

    Si vous auriez des pistes pour m'aider à comprendre ce serait le bienvenue :)


    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2022 à 1:15:36

      Bonjour, Merci de retirer toutes les lettres en capitales de votre titre.

      Majuscules abusives

      L'écriture en majuscules est considérée comme une parole criée et diminue autant la lisibilité du texte que sa compréhension. Les majuscules abusives sont donc interdites aussi bien dans les titres que dans les messages.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        22 juin 2022 à 14:34:32

        est-ce qu'il y a des entrées au moins dans ta base ? tu en ajoutes avant de faire ta recherche ? 

        A noter dans ton helper:

        - tu donnes le même nom de colonne (MOT_FR, ligne 18 et 23) dans les 2 tables or dans les requêtes.

        - tu droppes une seule des tables, l'autre est conservée.

        • Partager sur Facebook
        • Partager sur Twitter

        KOTLIN PROBLEME CURSEUR

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown