Только первая база данных DAO Flow of Room возвращает значения.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Только первая база данных DAO Flow of Room возвращает значения.

Сообщение Anonymous »

Я хочу получить определенный столбец из базы данных Android ROOM, но она продолжает возвращать пустой список.
Вот код моего интерфейса DAO:

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

@Query("SELECT * FROM expense_table ORDER BY category ASC")
fun getAllExpenses(): Flow

@Query("SELECT DISTINCT category FROM expense_table ORDER BY category ASC")
fun getAllCategories(): Flow
getAllExpenses работает отлично, но по какой-то причине getAllCategories продолжал возвращать пустые списки. Я даже упорядочил getAllExpenses по категориям, чтобы убедиться, что столбец существует и существует. Кстати, сокращение запроса до простого «ВЫБРАТЬ категорию ИЗ таблицы расходов» не работает.
Я пытался найти, как решить эту проблему, но не нашел решения. Чего и следовало ожидать, поскольку это настолько простой запрос, что я уверен, что просто делаю что-то невероятно глупое и упускаю из виду это.
Вот мои другие коды, я в основном просто скопировал код getAllExpenses, поэтому я думаю, что проблема в DAO, поскольку он единственный, который отличается, но я не уверен.
Репозиторий:

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

fun getAllExpenses() = expenseDao.getAllExpenses()

fun getAllCategories() = expenseDao.getAllCategories()
ViewModel:

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

var expenseRepository: ExpenseRepository
private val _expenseList = MutableStateFlow(emptyList())
val expenseList: StateFlow get() = _expenseList
private val _categoryList = MutableStateFlow(emptyList())
val categoryList: StateFlow get() = _categoryList

init {
expenseRepository = ExpenseRepository(expenseDatabase.expenseDao())
viewModelScope.launch {
expenseRepository.getAllExpenses().collect { expenses ->
_expenseList.value = expenses
}
expenseRepository.getAllCategories().collect { categories ->
_categoryList.value = categories
}
}
}
Активность (это просто экран-заполнитель для тестирования)

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

composable(route = AppScreen.TEST_SCREEN.name) {
val list by viewModel.expenseList.collectAsState()
val catList by viewModel.categoryList.collectAsState()

TestScreen(list, catList)
}
На экране будет отображаться размер списка и содержимое каждого списка. Список расходов отображается правильно, но размер списка категорий всегда равен 0.

Подробнее здесь: https://stackoverflow.com/questions/798 ... rns-values
Ответить

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

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

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

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

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