首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将androidx.paging.LoadState$NotLoading转换为androidx.paging.LoadState$Error \ PagingCompose

不能将androidx.paging.LoadState$NotLoading转换为androidx.paging.LoadState$Error \ PagingCompose
EN

Stack Overflow用户
提问于 2022-02-10 05:04:15
回答 1查看 279关注 0票数 1

事件处理程序

代码语言:javascript
复制
pagingFLow.apply {
    when {
        loadState.refresh is LoadState.Loading -> {}
        loadState.refresh is LoadState.NotLoading -> {}
        loadState.append is LoadState.Loading -> {
            item { CircularProgressIndicator() }
        }
        loadState.refresh is LoadState.Error -> {
            val e = pagingFLow.loadState.append as LoadState.Error
            Log.i("ERROR", e.toString())
        }
        loadState.append is LoadState.Error -> {
            val e = pagingFLow.loadState.append as LoadState.Error
            Log.i("ERROR", e.toString())
        }
    }
}

在这里,val e = pagingFLow.loadState.append as LoadState.Error抛出androidx.paging.LoadState$NotLoading cannot be cast to androidx.paging.LoadState$Error

这在没有DB的DataSource中运行得很好,但是当您添加RemoteMediator时,它会抛出这个错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-01 00:41:01

正如菲利普·德胡科夫所暗示的那样,你的演员阵容并不一定一定会成功。

loadState.append可以是以下内容中的任何内容:

代码语言:javascript
复制
pagingFLow.apply {
    when {
        ...
        loadState.refresh is LoadState.Error -> {
            val e = pagingFLow.loadState.append as LoadState.Error
            Log.i("ERROR", e.toString())
        }
        ...
    }
}

你的意思可能是:

代码语言:javascript
复制
pagingFLow.apply {
    when {
        ...
        loadState.append is LoadState.Error -> {
            Log.i("ERROR", loadState.append.toString())
        }
        ...
    }
}

注意:您不需要显式转换后类型检查,因为聪明的铸造,所以你可以完全省略转换。

而且,通常情况下,访问成员并假定在竞争条件下值不会更改是不安全的,因此在并发调用的情况下,您应该使用loadState.member而不是pagingFLow.loadState.member。虽然这可能对您的情况是好的,但也将防止科特林智能铸造后,类型检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71060034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档