Kotlin、RxJava 2、および新しい Android アーキテクチャ コンポーネントを初めて試すプロジェクトに取り組んでいます。別のスレッドで Room から削除メソッドを実行しようとしていERROR: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 12673 (RxCachedThreadS)
ますが、メソッドを実行すると強制終了します。私はこれらの2つのオプションを試しています:
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)
これを解決しようとしましたが、成功しませんでした。どんな助けも手に入るでしょう。ありがとう!