[英]Issue with room database android
我想將從交易中獲得的一些值插入 Room 數據庫。
我使用 Insert 方法將數據保存到房間數據庫中,並使用 @query 從數據庫中獲取所有數據。
但問題是數據沒有保存,當我在屏幕之間切換時,沒有數據跡象。
代碼 :
我的桌子
@Entity (tableName = "credit")
data class Credit(
@PrimaryKey(autoGenerate = true)
val id : Int? ,
var credittext: Long
)
我的道:
//credit table dao
@Query("SELECT * FROM credit ")
fun creditall () : LiveData<Credit>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertcredit (model : Credit)
@Query("DELETE FROM credit")
suspend fun deletecredit ()
}
我的存儲庫:
// repository for Credit
fun getallcredit() = db.GetDao().creditall()
suspend fun deletallcredit() = db.GetDao().deletecredit()
suspend fun insertcredit(model : Credit) = db.GetDao().insertcredit(model)
}
樣板間:
// this is for credit tb
fun creditall() = repository.getallcredit()
fun deletecredit() = CoroutineScope(Dispatchers.IO).launch {
repository.deletallcredit()
}
fun insertcredit(model: Credit) = CoroutineScope(Dispatchers.IO).launch {
repository.insertcredit(model)
}
我的房間數據庫:
package com.example.ahwazfriut.Room
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@Database(entities = [RoomTables::class , Credit::class], version = 1, exportSchema = false)
abstract class DataBaseRoom : RoomDatabase() {
abstract fun GetDao(): DaoCart
companion object {
@Volatile
private var instance: DataBaseRoom? = null
private val lock = Any()
operator fun invoke(context: Context) = instance
?: synchronized(lock) {
instance
?: makeDatabase(
context
).also {
instance = it
}
}
private fun makeDatabase(context: Context) = Room.databaseBuilder(
context.applicationContext,
DataBaseRoom::class.java,
"name"
).build()
}
}
這是我插入和獲取數據的活動:
class Payment_Activity : AppCompatActivity() {
lateinit var viewmodel: ViewModelRoom
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.payment_activity)
paymentVerification()
}
private fun paymentVerification() {
val textmoney: TextView = findViewById(R.id.money)
val data: Uri? = intent.data
val getpurchase = ZarinPal.getPurchase(this)
getpurchase.verificationPayment(data) {
isPaymentSuccess, refID, paymentRequest ->
if (isPaymentSuccess) {
val database = DataBaseRoom(this)
val repositoryCart = RepositoryCart(database)
val factoryRoom = FactoryRoom(repositoryCart)
viewmodel = ViewModelProvider(ViewModelStoreOwner { ViewModelStore() } , factoryRoom).get(ViewModelRoom::class.java)
viewmodel.insertcredit(Credit(null , paymentRequest.amount))
viewmodel.creditall().observe(this, Observer {
if (it != null) {
textmoney.text = it.credittext.toString()
}
})
}
感謝幫助 。
問題是我在錯誤的地方聲明了 getallcredit 方法。 實際上它必須在 on create 視圖上存儲數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.