«Невозможно получить доступ к базе данных в основном потоке, поскольку это потенциально может заблокировать пользовательAndroid

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

Сообщение Anonymous »

Изначально я напрямую обращался к функции viewModel, которая запускала сопрограмму области viewModel для запроса, который я выполнял. Была та же ошибка.
Затем я изменил функцию viewModel на функцию приостановки и вызвал ее из сопрограммы во фрагменте. это тоже не сработало.
Итак, я сделал так, чтобы функция вызывалась внутри сопрограммы, которая затем запускала другую сопрограмму в области viewModel. Это дало тот же результат.
Я подумал, что вызов его во время создания фрагмента может оказаться слишком большой нагрузкой. поэтому я попытался вызвать функцию viewModel с помощью прослушивателя нажатия кнопки. снова произошел сбой.
Я выполнил тот же запрос в инспекторе базы данных, и он работал нормально. так что проблема не в запросе.
На снимке экрана ниже я включил все необходимые подробности, касающиеся проблемы. Просто сосредоточьтесь на выделенном контенте. начать с фрагмента списка пропусков (вкладка вверху слева). Отсюда вызов функции viewModel на верхней правой вкладке. оттуда DAO прямо под ним. затем класс данных под ним.
Снимок экрана студии Android —
Изображение

функция viewModel -
fun resetAllAccess(){
viewModelScope.launch {
passwordDao.resetAccessForAll()
}
}

Функция DAO -
@Query("UPDATE password_data SET access = 0 WHERE access = 1")
fun resetAccessForAll()

Класс данных для базы данных –
@Entity(tableName = "password_data")
data class PasswordData(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
@ColumnInfo(name = "service_name") var serviceName: String,
@ColumnInfo(name = "service_password") var servicePassword: String,
@ColumnInfo(name = "is_an_application") var isAnApplication: Boolean = false,
@ColumnInfo(name = "use_finger_print") var useFingerPrint: Boolean = true,
@ColumnInfo(name = "access") var access: Boolean = false
)

вызов из фрагмента -
CoroutineScope(Dispatchers.IO).launch { viewModel.resetAllAccess() }


Подробнее здесь: https://stackoverflow.com/questions/705 ... ock-the-ui
Ответить

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

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

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

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

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