2 votes

Kotlin Passer un objet de classe en tant que paramètre Initialiser

Je dois passer en paramètre la classe/objet SQLiteDatabase pour permettre à execSQL d'agir. Dans SQL_User, il est inclus avec SQLiteOpenHelper étendu.... Mais comment l'initialiser sur DatabaseActivity

Je pense que je ne comprends pas du tout quelle est la marche à suivre avec cela...

class DatabaseActivity : Activity {
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)

      val db = Sql_User(this, "Users", null, 1)

      // Ici je reçois une erreur sur ??, rien de ce que je pense pourrait fonctionner
      if (db != null) { Sql_User.insert( «??» , "1", "DefaultUser") }

   }
}

class Sql_User : SQLiteOpenHelper {
    companion object {
        fun insert(p0: SQLiteDatabase?, p1: String, p2: String){ p0!!.execSQL("INSERT INTO Users (id_user, username) VALUES ('${p1}, '${p2}')") 
    }

    ...
}

L'erreur que je reçois sur cette ligne, n'importe quel paramètre que je passe est ... Le classificateur SQLiteDatabase n'a pas d'objet compagnon, et donc doit être initialisé ici

1voto

iagreen Points 4532

Votre variable db est de type SQLOpenHelper et non de type SQLiteDatabase. Pour obtenir une base de données à partir de l'objet d'aide, vous devez appeler la méthode [getWritableDatabase](https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase()) (ou la propriété writableDatabase en kotlin) pour obtenir une base de données.

Donc, quelque chose comme ceci pour vous --

 Sql_User.insert(db.writeableDatabase , "1", "DefaultUser")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X