Je voudrais créer une classe DB générale qui gère une DB locale et une autre DB. J'ai une erreur, mais je ne comprends pas quel est le problème ...
Classe générale:
class DBHandler {
companion object {
val sharedInstance = DBHandler() //gérer si sharedinstance est null pour éviter pb d'ecriture
}
fun methodToSelectData(strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/
{
print(message = strQuery)
val dbLocal = DBLocal(this, null, null, 1) //pb on this line
dbLocal.methodToSelectData(strQuery)
}
}
Classe DB:
class DBLocal(context: Context, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int) : SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION)
{
override fun onCreate(db: SQLiteDatabase)
{
print(DATABASE_NAME)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int)
{
}
fun methodToSelectData(strQuery: String)/*, completion: @escaping (_ result:*/
{
}
fun methodToInsertUpdateDeleteData(strQuery: String)/*, completion: @escaping (_ result: Bool) -> Void)*/
{
}
companion object {
private val DATABASE_VERSION = 1
private val DATABASE_NAME = "Local.db"
}
}
Merci d'avance.
class DBLocal(
context: Context,
name: String?,
factory: SQLiteDatabase.CursorFactory?,
version: Int
) : SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION) {
}
Problème: la classe DBLocal reçoit un contexte comme premier paramètre, mais lorsque vous l'appelez depuis la classe DBHandler.
val dbLocal = DBLocal(this, null, null, 1) //pb on this line
Vous this
passez en tant que classe DBLocal qui n'est pas un contexte de sous-classes de la classe Context. C'est pourquoi votre application génère une erreur.
Message d'erreur: l'incompatibilité de type nécessite un contexte
Solution: La solution simple est de passer un contexte dans la méthode qui nécessite un contexte pour faire le travail.
fun methodToSelectData(context: Context, strQuery: String, dataBase: String)/*, completion: @escaping (_ result:*/ {
print(message = strQuery)
val dbLocal = DBLocal(context, null, null, 1) //pb on this line
dbLocal.methodToSelectData(strQuery)
}
Et passez un contexte lors de l'appel de DBHandler, par exemple dans une activité ou un service.
DBHandler.sharedInstance.methodToSelectData(this, "your query", "dataBase")
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots