Как я могу использовать базу данных номеров deleteAll (), когда я выключаю приложение в kotlin? - PullRequest
0 голосов
/ 14 января 2020

Я уже установил roomdatabase для исторической активности, и я могу использовать insert methond. теперь, когда я щелкаю свою историю активности, данные все еще отображаются в элементах просмотра повторного использования. но я хочу сбросить данные, когда я выключаю сборку приложения. Как мне это сделать? Кто-нибудь может помочь? В моем 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 голосов
/ 14 января 2020

Кажется, вам нужна база данных в памяти. Вы можете использовать Room.inMemoryDatabaseBuilder вместо Room.databaseBuilder. Это документация этого Builder:

Создает RoomDatabase.Builder для базы данных в памяти. Информация, хранящаяся в базе данных в памяти, исчезает при завершении процесса. Как только база данных построена, вы должны сохранить ссылку на нее и повторно использовать ее.

...