Проблема с базой данных номеров
Я хочу вставить некоторое значение, полученное из моей транзакции, в базу данных комнаты .
Я использую метод 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() } }) }
Спасибо за помощь.
Что я уже пробовал:
Я так стараюсь, но все равно не получаю решения.
David Crow
Это только мне кажется, или там есть ссылки на таблицы "номер" и "кредит"? Вы написали весь вышеперечисленный код?
WorldofCode
да я это сделал
David Crow
И вы прошли через код, используя отладчик?
Gerry Schmitz
Вы начинаете с "записи" одной части данных, а затем добавляете все остальное. Проблема заключается в вашем "уровне доступа к данным", который, как можно было бы догадаться, является "БД."