Выбор определенного столбца в базе данных Android ROOM возвращает пустой списокAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Выбор определенного столбца в базе данных Android 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 ... empty-list
Ответить

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

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

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

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

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