Android 尝试使用Observable时收到Fata信号11

Android 尝试使用Observable时收到Fata信号11,android,android-studio,kotlin,rx-java2,android-room,Android,Android Studio,Kotlin,Rx Java2,Android Room,我正在做一个项目,第一次尝试Kotlin、RxJava2和新的android架构组件。我试图在单独的线程上从文件室执行一个delete方法,执行该方法时得到错误:致命信号11(SIGSEGV),代码1,tid 12673(RxCachedThreadS)中的fault addr 0x0,强制关闭。我正在尝试以下两种选择: 一, 二, 这是我的DeviceViewModel.kt(使用AndroidViewModel) 还有我的设备dao.kt @Dao abstract class Device

我正在做一个项目,第一次尝试Kotlin、RxJava2和新的android架构组件。我试图在单独的线程上从文件室执行一个delete方法,执行该方法时得到
错误:致命信号11(SIGSEGV),代码1,tid 12673(RxCachedThreadS)中的fault addr 0x0
,强制关闭。我正在尝试以下两种选择:

一,

二,

这是我的DeviceViewModel.kt(使用AndroidViewModel)

还有我的设备dao.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)
@Dao
抽象类设备DAO{
@查询(“从设备中选择计数(*))
抽象乐趣计数():Int
@查询(“从设备中选择*)
抽象趣味设备():可流动
@查询(“从设备中选择*电话=:p0”)
抽象有趣的设备(电话:字符串):设备?
趣味createOrUpdate(设备:设备){
Timber.d(“创建$Device的设备”)
insertOrUpdate(设备)
}
fun createTestDevice(名称:String,电话:String){
val设备:设备=设备()
device.phone=电话
device.name=名称
device.password=“12345”
Timber.d(“创建$Device的设备”)
insertOrUpdate(设备)
}
@插入(onConflict=OnConflictStrategy.REPLACE)
抽象趣味插件更新(vararg设备:设备)
@查询(“从设备中删除,其中电话=:p0”)
抽象趣味删除(电话:字符串)
@删除
摘要趣味删除(设备:设备)

我试图解决这个问题,但没有成功。任何帮助都会到来。谢谢!

我遇到了几乎相同的问题。我的情况是:我有一个
回收视图
列表,列表中的每个项目都有一个删除按钮。删除按钮触发了一个
可观察的
,将项目从房间的桌子上删除。同时,另一个
Observable
正在使用
PagedList
适配器更新
RecyclerView
的项目表

OP暗示这可能是评论中的问题,只是想确认一下:在将代码转换为使用LiveData而不是RxJava之后,我收到了一条正确的错误消息,这是删除项目时出现的
外键约束
失败(在我的例子中,我有另一个实体链接到被删除的实体,我将
onDelete
设置为
RESTRICT


出于某种原因,这个特定的错误会导致RxJava完全崩溃,而不是返回错误消息。看起来像是一个bug。

信号11是SIGSEGV,分段错误。你确定你的本机库正常吗?@TassosBassoukos你能说得更具体一点吗?我可以向你展示我的build.gradle如果需要信号11通常意味着你的进程ss试图访问其地址空间之外的内容,或试图在受保护的内存区域中写入内容。这在Java/Dalvik/ART中是不可能的,因为它们被明确设计为安全的。最可能的原因是您正在使用NDK开发本机LIB,但那里有一个bug。@Tassobassoukos我认为我没有使用任何东西NDK的ng。但是谢谢你的支持explanation@AndroidRuntimeException当我遇到这个问题时,我记不太清楚了,但我会检查项目的存储库。
Observable.just(Unit)
            .subscribeOn(Schedulers.io())
            .map { deviceViewModel.delete(device.phone) }
            .subscribe()
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)
}
@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)