捕获 androidx.paging.PagingData 转换方法中的异常

问题描述 投票:0回答:1

我有一个方法,可以将分页数据模型转换为 UIModel。

  pagingData
    .map { cachedData ->
      deserialize(cachedData)
    }
    .filter {
       it.isSuccess
    }
    .map { it ->
       mapToUiModel(it.getOrThrow())
    }

代码有 2 个潜在的断点,第一个是反序列化发生时,第二个是 getOrThrow() 发生时。

如果我在其末尾放置 .catch { } ,它不会捕获,因为 PagingData 转换发生在另一个线程上,如果我放置 try catch,也不会捕获。

有什么建议吗?

谢谢,

kotlin androidx android-paging
1个回答
0
投票

您的

deserialize
返回一个
Result
,我认为它封装了反序列化期间发生的任何错误。然后你
filter
出所有失败的
Result
,这意味着
getOrThrow
永远不会真正抛出。

所以,如果你想处理反序列化错误,你只需要在过滤之前分析

Result
即可。

  pagingData
    .map { cachedData ->
      deserialize(cachedData)
    }
    .filter {
       it.exceptionOrNull()?.let { e ->
           println("Deserialize error $e")
       }
       it.isSuccess
    }
    .map { it ->
       mapToUiModel(it.getOrThrow())
    }
© www.soinside.com 2019 - 2024. All rights reserved.