Чтение и запись в Room
Решил ознакомиться с Room. Поискал в интернете уроки, понял основные принципы работы, кроме одного. А именно: как читать и записывать данные?
У меня есть экспериментальное приложение. Идея простая: пользователь вводит свой логин, имя и возраст и нажимает кнопку "Save", если ему надо сохранить информацию. Если же он её уже сохранял ранее и хочет её открыть, то он вводит свой логин и нажимает кнопку "Open", после чего поля с именем и возрастом заполняются ранее введенными данными. Единственная проблема: как это сделать?
Из главного потока сохранять или читать данные нельзя, что логично. Хотел в OnClickListener кнопки "Save" создать поток, записывающий данные в БД, а в OnClickListener кнопки "Open" создать поток, читающий данные из БД, но и так нельзя: операции чтения и записи должны происходить в одном потоке. AsyncTask c версии Android 11 - deprecated. Какие есть способы для решения задачи? Заранее спасибо.
Ответы (1 шт):
Решений тьма, можно как написал pavloff
Гугл в своих туториалах использует класс Executor для реализации асинхронной записи. При чтении используется LiveData, это асинхронная операция и дополнительно запускать ее в асинхронном потоке не требуется
Если используете Kotlin то корутины, для них есть прекрасное расширение Можно rx-java так же использовать для асинхроного чтение] и записи Ну и на худой конец, если вы пока не освоили ни одного из инструментов, для асинхронной работы, но потрогать room очень хочется то проверку на главный поток можно отключить - добавить в билдер
var db = Room.databaseBuilder(
applicationContext,
AppDb::class.java, "database")
.allowMainThreadQueries() //отключает проверку
.build()
После этого можете записывать и читать на любом потоке. Но лучше так не делайте и разберитесь с асинхронной работой