Android ROOM LIVEDATA不发送结果

Android ROOM LIVEDATA不发送结果,android,sql,kotlin,rx-java,android-room,Android,Sql,Kotlin,Rx Java,Android Room,嗨,我有一个从数据源检索的项目列表,然后我在可观察对象上应用一个地图,将数据存储到房间中 它设法将它添加到表中,但当我尝试检索它的LiveData时,它似乎没有通知我的观察者结果 表中肯定有数据,当我将返回时间从LiveData更改为简单的列表时,我的查询工作正常,而且工作得非常好 这是我的数据类 @Entity data class Item( @PrimaryKey val id:String, val title: String,

嗨,我有一个从数据源检索的项目列表,然后我在可观察对象上应用一个地图,将数据存储到房间中

它设法将它添加到表中,但当我尝试检索它的LiveData时,它似乎没有通知我的观察者结果

表中肯定有数据,当我将返回时间从LiveData更改为简单的列表时,我的查询工作正常,而且工作得非常好

这是我的数据类

@Entity
data class Item(
        @PrimaryKey
        val id:String,
        val title: String,
        val description: String,
        val imgUrl: String,
        val  usageRules : List<String>,

)
以下是我如何将数据插入数据库:

@Inject
lateInt val database : MyDatabase

   override fun getAllItems(): Single<LiveData<MutableList<Item>>> {
     //retrieve new data using rertrofit
        networkController.getItems().map { responseItems ->
            saveAllItems(responseItems )
            getItems()
}

@Transaction
 fun saveAllItems(allItems: ItemsDataSource) {
    database.getProductDao().saveAllItems(allItems.loadedItems)
    database.getProductDao().saveAllItems(allItems.savedItems)
    database.getProductDao().saveAllItems(allItems.expiredItems)
    database.getProductDao().saveAllItems(allItems.unloadedItems)
}

fun getItems() : LiveData<MutableList<Item>>{

    return database.getProductDao().getAllItems()
}

保存数据收集时,尝试使用
vararg
而不是
List

@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveAllItems(vararg itemList: Item)
然后,您可以使用列表中的
*
(也称为
扩展运算符
)调用此方法,如下所示

saveAllItems(*responseItems.toTypedArray())

保存数据收集时,尝试使用
vararg
而不是
List

@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveAllItems(vararg itemList: Item)
然后,您可以使用列表中的
*
(也称为
扩展运算符
)调用此方法,如下所示

saveAllItems(*responseItems.toTypedArray())

函数
getUnloadedOffers()
是否返回空的可变列表?我不确定将
传递到
项视频数据
是否有效,因为观察LiveData正在bg线程上运行(如果我没有弄错的话)

您的函数
getUnloadedOffers()
是否返回空的可变列表?我不确定将
items
传递到
itemsLiveData
是否有效,因为观察LiveData是在bg线程上运行的(如果我没有弄错的话)

我不确定列表,但在官方教程中,他们使用varargs,所以应该可以。房间接受一个对象数组而不是@Insert的列表,Spread操作符对我来说很有效。似乎不起作用。奇怪的是,room没有抛出任何插入错误,所以很难调试OK它确实插入了数据,但我遇到了另一个问题。也就是说,LiveData似乎没有得到更新,也没有从数据库发出查询。我将更新我的问题。我不确定列表,但在官方的Room教程中,他们使用varargs,所以应该可以。房间接受一个对象数组而不是@Insert的列表,Spread操作符对我来说很有效。似乎不起作用。奇怪的是,room没有抛出任何插入错误,所以很难调试OK它确实插入了数据,但我遇到了另一个问题。也就是说,LiveData似乎没有得到更新并从数据库发出查询。我将更新我的问题是,这就是问题所在。我必须首先从sql room查询中获取实时数据本身,并将其沿着我的委托人传递回视图模型。事实正是如此,通常您应该从room中选择LiveData,将其传递给ViewModel,并在活动/片段中订阅它,或者在您需要的任何地方订阅。是的,这就是问题所在。我必须首先从sql room查询中获取实时数据本身,并将其沿着我的委托人传递回视图模型。事实正是如此,通常您应该从room中选择LiveData,将其传递给ViewModel,然后在活动/片段中或任何需要的地方订阅它
@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveAllItems(vararg itemList: Item)
saveAllItems(*responseItems.toTypedArray())