在Kotlin中关闭应用程序后,如何使用会议室数据库deleteAll()?

时间:2020-01-14 04:02:40

标签: android-studio kotlin android-room

我已经将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()
    }


}

1 个答案:

答案 0 :(得分:0)

似乎您需要一个内存数据库。您可以使用Room.inMemoryDatabaseBuilder代替Room.databaseBuilder。这是此Builder的文档:

为内存数据库创建RoomDatabase.Builder。信息存储在内存中 终止该进程后,数据库消失。 建立数据库后,您应该保留对其的引用并重新使用它。