Android和Room:插入工作,查询不工作
我正在项目中使用Room,我有以下DAO接口:Android和Room:插入工作,查询不工作,android,kotlin,rx-java2,android-room,Android,Kotlin,Rx Java2,Android Room,我正在项目中使用Room,我有以下DAO接口: @Dao interface BalanceDao { @Query("SELECT * FROM balance") fun getAllBalances(): Flowable<List<BalanceDataModel>> @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertBalanceList(balanceData
@Dao
interface BalanceDao {
@Query("SELECT * FROM balance")
fun getAllBalances(): Flowable<List<BalanceDataModel>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertBalanceList(balanceDataModelList: List<BalanceDataModel>): List<Long>
}
然后在PortfolioManager中,我可以访问ViewModel,从中调用以下方法:
fun getPortfolioCoins() {
coinRepository
.getBalanceListPortfolio()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onSuccess = {
balanceListLiveData.postValue(it)
})
}
在repository类中,我有:
fun getBalanceListPortfolio(): Single<List<Balance>> {
val converter = BalanceDataModelConverter()
val balanceList = mutableListOf<Balance>()
coinDatabase.balanceDao()
.getAllBalances()
.toObservable()
.flatMapIterable { t: List<BalanceDataModel> -> t }
.map { t: BalanceDataModel ->
{
val a: Balance = converter.fromFirstToSecond(t)
balanceList.add(a)
}
}
return Single.just(balanceList.toList())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
有人知道会出什么问题吗?提前多谢 我刚看到你最近的编辑。我认为您的问题是您在getBalanceListPortfolio中返回了一个空列表。这一可观察到的结果没有得到认可
coinDatabase.balanceDao()
.getAllBalances()
.toObservable()
.flatMapIterable { t: List<BalanceDataModel> -> t }
.map { t: BalanceDataModel ->
{
val a: Balance = converter.fromFirstToSecond(t)
balanceList.add(a)
}
}
我建议你把它转换成列表,并返回这样的可观察的东西,不能尝试编译。我现在没有工作环境
return coinDatabase.balanceDao()
.getAllBalances()
.toObservable()
.flatMapIterable { t: List<BalanceDataModel> -> t }
.map { t: BalanceDataModel -> converter.fromFirstToSecond(t) }
.toList()
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
这被包装为一个可观察的对象,您可能希望首先将您的类型更改为可观察的,而不是单一的,只是为了测试。让我知道结果。你是如何订阅可观测数据的?你能显示代码吗?谢谢@tompee用更多细节更新了问题。你是否尝试在getPortfolioCoins的onSuccess中设置断点,并验证流中是否确实没有任何内容?我怀疑问题已经发生在rx流之外的某个地方。我怀疑余额列表确实已在balanceListLiveData中发布,但由于尚未配置任何观察者,因此未发布。在订阅rx observable之前,首先尝试将观察者设置为实时数据。我也怀疑这或至少这是我的希望,但我尝试过更新问题中的getAllCoins方法,但仍然是sameyes!这就是问题所在,非常感谢!现在我看到了我以前的答案,在看到你正确的答案后,我意识到了这个愚蠢的错误。再次非常感谢!
return coinDatabase.balanceDao()
.getAllBalances()
.toObservable()
.flatMapIterable { t: List<BalanceDataModel> -> t }
.map { t: BalanceDataModel -> converter.fromFirstToSecond(t) }
.toList()
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())