Android/Kotlin:如何创建使用DBLocal类的类?错误消息:类型不匹配需要上下文
我想创建一个通用的DB类来管理一个本地DB和另一个DB。我有一个错误,但我不明白是什么问题 普通课程:Android/Kotlin:如何创建使用DBLocal类的类?错误消息:类型不匹配需要上下文,android,database,kotlin,Android,Database,Kotlin,我想创建一个通用的DB类来管理一个本地DB和另一个DB。我有一个错误,但我不明白是什么问题 普通课程: class DBHandler { companion object { val sharedInstance = DBHandler() //gérer si sharedinstance est null pour éviter pb d'ecriture } fun methodToSelectData(strQuery: String, dat
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)
}
}
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"
}
}
DB类:
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)
}
}
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"
}
}
提前感谢。您可以为
methodToSelectData
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)
}
问题:DBLocal类接收一个上下文作为第一个参数,但是当您从DBHandler类调用它时
val dbLocal = DBLocal(this, null, null, 1) //pb on this line
您将此
作为DBLocal类传递,该类不是Context类的子类的上下文。这就是你的应用程序抛出错误的原因
错误消息:类型不匹配需要上下文
解决方案:简单的解决方案是将上下文传递到需要上下文来执行作业的方法中
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)
}
并在调用DBHandler时传递上下文,例如在活动或服务中
DBHandler.sharedInstance.methodToSelectData(this, "your query", "dataBase")
您在哪里使用
methodToSelectData
方法?在活动/片段中?