Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android和Room:插入工作,查询不工作_Android_Kotlin_Rx Java2_Android Room - Fatal编程技术网

Android和Room:插入工作,查询不工作

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

我正在项目中使用Room,我有以下DAO接口:

@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())