我正在做一个项目,第一次尝试 Kotlin、RxJava 2 和新的 android 架构组件。我正在尝试在单独的线程上从 Room 执行删除方法,并且ERROR: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 12673 (RxCachedThreadS)
在执行该方法时得到了结果,并且强制关闭。我正在尝试这两个选项:
1.
Single.fromCallable { deviceViewModel.delete(device.phone) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
2.
Observable.just(Unit)
.subscribeOn(Schedulers.io())
.map { deviceViewModel.delete(device.phone) }
.subscribe()
这是我的 DeviceViewModel.kt(使用 AndroidViewModel)
class DeviceViewModel constructor(application: Application) : AndroidViewModel(application) {
@Inject lateinit var db: AppDatabase
init {
(application as KaiApplication).appComponent.inject(this)
}
fun count() = db.deviceModel().count();
fun getDevices() = db.deviceModel().devices();
fun getDevice(phone: String) = db.deviceModel().device(phone)
fun create(device: Device): Device {
db.deviceModel().createOrUpdate(device).let {
return device
}
}
fun createTestDevice(name: String, phone: String) {
db.deviceModel().createTestDevice(name, phone)
}
fun delete(device: Device): Device {
db.deviceModel().delete(device).let {
return device
}
}
fun delete(devicePhone: String) {
db.deviceModel().delete(devicePhone)
}
还有我的 DeviceDao.kt
@Dao
abstract class DeviceDao {
@Query("SELECT COUNT(*) FROM device")
abstract fun count(): Int
@Query("SELECT * FROM device")
abstract fun devices(): Flowable<List<Device>>
@Query("SELECT * FROM device WHERE phone = :p0")
abstract fun device(phone: String): Device?
fun createOrUpdate(device: Device) {
Timber.d("Device to create $device")
insertOrUpdate(device)
}
fun createTestDevice(name: String, phone: String) {
val device: Device = Device()
device.phone = phone
device.name = name
device.password = "12345"
Timber.d("Device to create $device")
insertOrUpdate(device)
}
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insertOrUpdate(vararg devices: Device)
@Query("DELETE FROM device WHERE phone = :p0")
abstract fun delete(phone: String)
@Delete
abstract fun delete(device: Device)
我试图解决这个问题,但没有成功。任何帮助都会到来。谢谢!