我的anko-sqlite数据库对象无法调用
My anko-sqlite database object can't be called
这是我的数据库助手代码
class DatabaseHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "FavoriteMatch.db", null, 1){
companion object {
private var instance: DatabaseHelper? = null
@Synchronized
fun getInstance(ctx: Context): DatabaseHelper {
return instance ?: DatabaseHelper(ctx.applicationContext)
}
}
override fun onCreate(db: SQLiteDatabase) {
db.createTable(Favorite.TABLE_FAVORITE, true,
Favorite.MATCH_ID to TEXT + PRIMARY_KEY,
Favorite.TEAM_HOME_NAME to TEXT,
Favorite.TEAM_HOME_GOAL to INTEGER,
Favorite.TEAM_AWAY_NAME to TEXT,
Favorite.TEAM_AWAY_GOAL to INTEGER,
Favorite.EVENT_DATE to TEXT,
Favorite.EVENT_TIME to TEXT)
}
override fun onUpgrade(db: SQLiteDatabase, p1: Int, p2: Int) {
db.dropTable(Favorite.TABLE_FAVORITE, true)
}
val Context.database : DatabaseHelper
get() = getInstance(applicationContext)
}
这是最喜欢的数据class
data class Favorite(
val idEvent: String?,
val strHomeTeam: String?,
val strAwayTeam: String?,
val strHomeGoalDetails: String?,
val strAwayGoalDetails: String?,
val dateEvent: String?,
val strTime: String?
) {
companion object {
const val TABLE_FAVORITE: String = "TABLE_FAVORITE"
const val MATCH_ID: String = "ID_"
const val TEAM_HOME_NAME: String = "HOME_NAME"
const val TEAM_HOME_GOAL: String = "HOME_GOAL"
const val TEAM_AWAY_NAME: String = "AWAY_NAME"
const val TEAM_AWAY_GOAL: String = "AWAY GOAL"
const val EVENT_DATE: String = "DATE_EVENT"
const val EVENT_TIME: String = "EVENT_TIME"
}
}
但是我无法在任何地方从数据库助手调用我的数据库实例,例如,我在 ScheduleDetailActity.kt 中调用它,没有数据库对象
目标是这个数据库可以这样调用
database.use {
//Insert to database
}
Context.database 应该在 DatabaseHelper
范围之外定义。所以你的 DatabaseHelper
应该如下所示
class DatabaseHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "FavoriteMatch.db", null, 1){
// Your previous code
}
val Context.database : DatabaseHelper
get() = getInstance(applicationContext)
这是我的数据库助手代码
class DatabaseHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "FavoriteMatch.db", null, 1){
companion object {
private var instance: DatabaseHelper? = null
@Synchronized
fun getInstance(ctx: Context): DatabaseHelper {
return instance ?: DatabaseHelper(ctx.applicationContext)
}
}
override fun onCreate(db: SQLiteDatabase) {
db.createTable(Favorite.TABLE_FAVORITE, true,
Favorite.MATCH_ID to TEXT + PRIMARY_KEY,
Favorite.TEAM_HOME_NAME to TEXT,
Favorite.TEAM_HOME_GOAL to INTEGER,
Favorite.TEAM_AWAY_NAME to TEXT,
Favorite.TEAM_AWAY_GOAL to INTEGER,
Favorite.EVENT_DATE to TEXT,
Favorite.EVENT_TIME to TEXT)
}
override fun onUpgrade(db: SQLiteDatabase, p1: Int, p2: Int) {
db.dropTable(Favorite.TABLE_FAVORITE, true)
}
val Context.database : DatabaseHelper
get() = getInstance(applicationContext)
}
这是最喜欢的数据class
data class Favorite(
val idEvent: String?,
val strHomeTeam: String?,
val strAwayTeam: String?,
val strHomeGoalDetails: String?,
val strAwayGoalDetails: String?,
val dateEvent: String?,
val strTime: String?
) {
companion object {
const val TABLE_FAVORITE: String = "TABLE_FAVORITE"
const val MATCH_ID: String = "ID_"
const val TEAM_HOME_NAME: String = "HOME_NAME"
const val TEAM_HOME_GOAL: String = "HOME_GOAL"
const val TEAM_AWAY_NAME: String = "AWAY_NAME"
const val TEAM_AWAY_GOAL: String = "AWAY GOAL"
const val EVENT_DATE: String = "DATE_EVENT"
const val EVENT_TIME: String = "EVENT_TIME"
}
}
但是我无法在任何地方从数据库助手调用我的数据库实例,例如,我在 ScheduleDetailActity.kt 中调用它,没有数据库对象
目标是这个数据库可以这样调用
database.use {
//Insert to database
}
Context.database 应该在 DatabaseHelper
范围之外定义。所以你的 DatabaseHelper
应该如下所示
class DatabaseHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "FavoriteMatch.db", null, 1){
// Your previous code
}
val Context.database : DatabaseHelper
get() = getInstance(applicationContext)