【问题标题】:Issue with room database android房间数据库android的问题
【发布时间】:2020-09-14 18:42:02
【问题描述】:

我想将我从交易中获得的一些值插入到 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)


}

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


                    }

                })
}

谢谢你的帮助。

【问题讨论】:

    标签: android database kotlin mvvm


    【解决方案1】:

    问题是我在错误的地方声明了 getallcredit 方法。实际上它必须在 on create 视图上才能存储数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2018-08-17
      相关资源
      最近更新 更多