tgoop.com/android_live/536
Last Update:
Room и опциональные параметры
#room
Есть достаточно интересная фича Room о которой не написано в документации, но которая может здорово облегчить жизнь разработчикам.
Думаю, причина заключается в том, что эта функция лишь косвенно связана с Room, а больше связана с написанием SQL-запросов. 🙂
Опытным путём получилось её найти, и спешу поделиться этим лайфхаком с вами.
Допустим, у вас в приложении есть список людей. При этом по умолчанию выводится полный список, но пользователь приложения может выбрать параметр с именем человека, и вам надо отфильтровать список по этому параметру.
В Kotlin у нас есть возможность использовать опциональные параметры для функции, и первое решение, которое приходит в голову — это написать запрос, используя их:
@Query("SELECT * FROM User WHERE name = :name")
fun getUsers(name: String? = null): List<User>
При такой записи параметр считается за часть запроса, и не передаёт name
, в этом случае список будет пустым.
Но можно чуть-чуть поменять запрос, и всё работает корректно:
@Query("SELECT * FROM User WHERE (:name IS NULL OR name = :name)")
fun getUsers(name: String? = null): List<User>
При такой записи параметр name
будет игнорироваться, если он будет null, и возвратится весь список, имеющийся в базе данных.
Особенно круто эта фича заходит, если фильтр состоит из нескольких полей (3 и более).
А какие у вас есть неочевидные кейсы при работе с Room?
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/536