我已经将roomdatabase设置为历史活动,并且可以使用insert methond。 现在,当我单击历史记录活动时,数据仍然显示在recyclerview项中。 但我想在关闭构建应用程序时重置数据。我该怎么做?有人可以帮忙吗? 在我的DAO中,您可以看到有趣的deleteAll(),因此在关闭应用程序后如何使用它? History.kt
@Entity(tableName = "history")
class History(@PrimaryKey(autoGenerate = true) var id: Long?,
@ColumnInfo(name= "item") var item:String?,
@ColumnInfo(name = "title") var title:String?,
@ColumnInfo(name = "price") var price:Int?,
@ColumnInfo(name = "Image") var Image:String?
) {
constructor(): this(null,"","",0,"")
}
@Dao
interface HistoryDao {
@Query("SELECT * FROM history")
fun getAll(): List<History>
@Insert(onConflict = REPLACE )
fun insert(history: History)
@Query("DELETE from history")
fun deleteAll(): List<History>
}
HistroyDB
@Database(entities = [History::class], version = 3)
abstract class HistoryDB: RoomDatabase() {
abstract fun HistoryDB(): HistoryDao
companion object {
private var INSTANCE: HistoryDB?=null
fun getInstance(context: Context): HistoryDB? {
if (INSTANCE == null) {
synchronized(HistoryDB::class) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
HistoryDB::class.java, "history.db")
.fallbackToDestructiveMigration()
.build()
}
}
return INSTANCE
}
fun destoryInstance() {
INSTANCE = null
}
}
}
HistoryActivity
class HistoryActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {
private var historyDb: HistoryDB? = null
private var historyList = listOf<History>()
lateinit var adapter: HistoryitemReclycerViewAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_history)
historyDb = HistoryDB.getInstance(this)
adapter = HistoryitemReclycerViewAdapter(this, historyList)
val r = Runnable {
try {
historyList = historyDb?.HistoryDB()?.getAll()!!
adapter = HistoryitemReclycerViewAdapter(this, historyList)
adapter.notifyDataSetChanged()
swipeRefreshLo.setOnRefreshListener(this)
recyclerview.adapter = adapter
recyclerview.layoutManager = LinearLayoutManager(this)
} catch (e: Exception) {
}
}
val thread = Thread(r)
thread.start()
}
override fun onRefresh() {
swipeRefreshLo.isRefreshing = false
}
override fun onDestroy() {
HistoryDB.destoryInstance()
historyDb =null
super.onDestroy()
}
}
答案 0 :(得分:0)
似乎您需要一个内存数据库。您可以使用Room.inMemoryDatabaseBuilder
代替Room.databaseBuilder
。这是此Builder的文档:
为内存数据库创建RoomDatabase.Builder。信息存储在内存中 终止该进程后,数据库消失。 建立数据库后,您应该保留对其的引用并重新使用它。