我正在尝试处理 Kotlin/Android 上的改造响应:
if (response.isSuccessful && response.body() != null) {
val result = response.body().result
Run Code Online (Sandbox Code Playgroud)
首先,我不明白响应如何成功并且正文为空。无论如何,如果我添加空检查,我也会得到“智能转换为‘xy’是不可能的,因为‘response.body()’是一个复杂的表达式”添加非空断言代码(!!)实际上对我来说这是两个单独的警告,但为什么是空断言请求呢?
编译器可以\xe2\x80\x99t知道body()每次都会返回相同的内容,因此它可以\xe2\x80\x99t将其智能转换为非空。另外,它不知道任何复杂的事情,比如如果isSuccessful为 true,则主体不会为 null。
由于我们从该库的文档中知道它始终是相同的,因此可以安全地使用!!. 但是您也可以将该值复制到局部变量并在 null 检查中使用该变量。这样,即使您误解了文档,您也可以确保您的代码是安全的。
我自己并没有真正使用 Retrofit,但是通过阅读一些相关内容,我知道您可以通过使用挂起函数在 Kotlin 中更自然地使用它,然后您就不必使用回调和 Response 对象。因此,不要创建一个返回 a 的函数Call<MyData>,然后将调用排队,侦听成功/失败,然后在成功时解包主体;相反,您可以将函数标记为suspend并直接返回MyData。在进行函数调用时使用 try/catch 或runCatching,因为不成功时会抛出异常。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |