Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
房间数据库android的问题_Android_Database_Kotlin_Mvvm - Fatal编程技术网

房间数据库android的问题

房间数据库android的问题,android,database,kotlin,mvvm,Android,Database,Kotlin,Mvvm,我想将我从事务中获得的一些值插入房间数据库 我使用Insert方法将数据保存到房间数据库中,并使用@query从数据库中获取所有数据 但问题是数据没有保存,当我在屏幕之间切换时,没有数据的迹象 代码: 我的桌子 @Entity (tableName = "credit") data class Credit( @PrimaryKey(autoGenerate = true) val id : Int? , var credittext: Long

我想将我从事务中获得的一些值插入房间数据库

我使用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 ()


}
Viewmodel房间:


    // 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方法。实际上,它必须位于“创建”视图上才能存储数据


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()


                    }

                })
}