我是一个android开发者。 有没有一种方法可以在应用程序运行时只将数据放入SQLiteDatabase一次? 在我的MainActivity中,重复数据在运行应用程序时不断累积。 我希望在用户启动应用程序时只添加一次数据。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val db = MyDatabaseHelper(this)
db.createRamen(MyData(1))
db.createRamen(MyData(2))
db.createRamen(MyData(3))
db.createRamen(MyData(4))
...
}
...
}
[编辑]
class RamenDatabaseHelper(var context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
companion object {
private val DATABASE_NAME = "MyDatabase"
private val DATABASE_VERSION = 1
private val TABLE_NAME = "MyTable"
}
private val KEY_ID = "id"
private val KEY_NAME = "name"
override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE = "CREATE TABLE IF NOT EXISTS $TABLE_NAME($KEY_ID INTEGER PRIMARY KEY, $KEY_NAME TEXT)"
db!!.execSQL(CREATE_TABLE)
}
override fun onUpgrade(db: SQLiteDatabase?, old: Int, new: Int) {
if (old >= new) {
db!!.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
onCreate(db)
}
}
}
我的数据只有“名称”键
在数据库中只执行一次添加数据的代码的一种方法是使用SharedPreferences
。
因此在MainActivity
的onCreate()
中,您检查SharedPreferences
是否存在某个Boolean
值,并且该值为True
。
如果它不存在,则将数据添加到数据库,然后在SharedPreferences
中将Boolean
值设置为True
。
如果存在,则不会发生任何事情,因为这不是第一次运行应用程序。
val sp: SharedPreferences = getSharedPreferences("MyAppPreferences", MODE_PRIVATE)
if (!sp.getBoolean("First", false)) {
<your code here>
val ed = sp.edit()
ed.putBoolean("First", true)
ed.apply()
}
用将数据添加到数据库的代码替换占位符
。
您必须在RamenDatabaseHelper的onCreate函数中添加insert语句。
override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE = "CREATE TABLE IF NOT EXISTS $TABLE_NAME($KEY_ID INTEGER PRIMARY KEY, $KEY_NAME TEXT)"
db!!.execSQL(CREATE_TABLE)
val CREATE_TABLE = "INSERT INTO $TABLE_NAME VALUES ($ID_YOU_NEED_TO_INSERT, $NAME)"
db!!.execSQL(CREATE_TABLE)
}
这只执行一次。