3

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)

これを解決しようとしましたが、成功しませんでした。どんな助けも手に入るでしょう。ありがとう!

4

1 に答える 1