Avatar ·

Android Room:如何修复简单SELECT查询时的“无法在主线程访问数据库”错误?

大家好!我是Kotlin Android开发的新手,正在使用Room进行本地数据库操作。我有一个简单的User实体和DAO,其中包含getAllUsers()方法,返回所有用户列表。我在Activity中调用此方法来在RecyclerView中显示数据。但应用崩溃并报错:

java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

以下是我的代码:

// Entity
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

// DAO
@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    suspend fun getAllUsers(): List<User>
}

// Database
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

// Activity
class MainActivity : AppCompatActivity() {