要在Android中使用RxJava3与Room结合,可以按照以下步骤进行操作:
dependencies {
// Room
implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"
// RxJava3
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
).build()
INSTANCE = instance
instance
}
}
}
}
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getUsers(): Flowable>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertUser(user: User)
}
class UserRepository(private val userDao: UserDao) {
fun getUsers(): Flowable> {
return userDao.getUsers()
}
fun insertUser(user: User) {
userDao.insertUser(user)
}
}
class MainActivity : AppCompatActivity() {
private lateinit var userRepository: UserRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val userDao = AppDatabase.getInstance(this).userDao()
userRepository = UserRepository(userDao)
userRepository.getUsers()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { users ->
// 处理获取到的用户数据
}
val user = User(1, "John Doe", "[email protected]")
userRepository.insertUser(user)
}
}
通过以上步骤,您可以将RxJava3与Android Room结合使用,并在Android应用中进行数据访问和处理。