Невозможно получить доступ к объектам доступа к данным в объекте базы данных Rooms.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно получить доступ к объектам доступа к данным в объекте базы данных Rooms.

Сообщение Anonymous »

Я использую библиотеку базы данных Rooms версии 2.6.1 для интеграции функций базы данных в мое тестовое приложение для Android. Приложение успешно компилируется, но проблема, с которой я столкнулся, заключается в том, что я не могу получить доступ к «Объекту доступа к данным» из ссылочного объекта базы данных Room
Конфигурация базы данных< /p>

Код: Выделить всё

    package com.example.expensesrecorder.database

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.example.expensesrecorder.database.databaseaccessobjects.CategoryDao
import com.example.expensesrecorder.database.databaseaccessobjects.ExpenseDao
import com.example.expensesrecorder.database.entities.Category
import com.example.expensesrecorder.database.entities.Expense
import com.example.expensesrecorder.database.typeconvertors.ZonedDateTimeConverter

@Database(entities = [Expense::class, Category::class], version = 1)
@TypeConverters(
value = [ZonedDateTimeConverter::class]
)
abstract class ExpenseDatabase : RoomDatabase() {
abstract fun expenseDao(): ExpenseDao
abstract fun categoryDao(): CategoryDao
}

Класс приложений Android

Код: Выделить всё

import android.app.Application
import androidx.room.Room
import androidx.room.RoomDatabase
import com.example.expensesrecorder.database.ExpenseDatabase

class AndroidApp : Application() {

lateinit var myRoomDatabase: RoomDatabase

override fun onCreate() {
super.onCreate()
myRoomDatabase = Room
.databaseBuilder(applicationContext, ExpenseDatabase::class.java, "expense_database")
.build()
}
}
Объект доступа к данным категории

Код: Выделить всё

package com.example.expensesrecorder.database.databaseaccessobjects

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import com.example.expensesrecorder.database.entities.Category
import com.example.expensesrecorder.database.entities.Expense

@Dao
interface CategoryDao {
@Query("SELECT * FROM Category")
fun getAll(): List

@Insert
fun insertAll(vararg users: Category)

@Delete
fun delete(user: Category)
}
Объект доступа к данным о расходах

Код: Выделить всё

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import com.example.expensesrecorder.database.entities.Expense

@Dao
interface ExpenseDao {
@Query("SELECT * FROM expense")
fun getAll(): List

@Query("SELECT * FROM expense WHERE uid IN (:userIds)")
fun loadAllByIds(userIds: IntArray): List

@Query("SELECT * FROM expense WHERE expense_title LIKE :first AND "  +
"expense_title LIKE :last LIMIT 1")
fun findByName(first: String, last: String): Expense

@Insert
fun insertAll(vararg users: Expense)

@Delete
fun delete(user: Expense)
}

Субъект категории

Код: Выделить всё

package com.example.expensesrecorder.database.entities

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import java.time.ZonedDateTime

@Entity(tableName="category")
data class Category(
@PrimaryKey val uid: Int,
@ColumnInfo(name = "category_title") val categoryTitle: String,
@ColumnInfo(name = "category_description") val categoryDescription: String?,
@ColumnInfo(name = "category_status") val categoryStatus: Boolean?

)
Субъект расходов

Код: Выделить всё

package com.example.expensesrecorder.database.entities

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import java.text.DecimalFormat
import java.time.LocalDateTime
import java.time.ZonedDateTime
import java.util.Date

@Entity(tableName="expense")
data class Expense(
@PrimaryKey val uid: Int,
@ColumnInfo(name = "expense_title") val expenseTitle: String,
@ColumnInfo(name = "expense_description") val expenseDescription: String?,
@ColumnInfo(name = "expense_category_id") val expenseCategoryId: String?,
@ColumnInfo(name = "expense_amount") val expenseAmount: Double,
@ColumnInfo(name = "expense_date") val expenseDate: ZonedDateTime
)

Наконец, когда я пробую приведенный ниже код в своей деятельности (событие oncreate). Я не могу получить доступ к методам «catgoryDao» или «expenseDao», хотя они присутствуют в реализации, которая отображается в папке сборки

Код: Выделить всё

val mApplication: AndroidApp = applicationContext as AndroidApp
val expenseDao= mApplication.myRoomDatabase.expenseDao()
Я получаю сообщение об ошибке «неразрешенная ссылка».
Последние пару дней я искал решение в Google.
Заранее благодарим за любые советы
с уважением
Мэтью

Подробнее здесь: https://stackoverflow.com/questions/782 ... ase-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»