gpt4 book ai didi

android - 协程异常抛出 KotlinNullPointerException

转载 作者:行者123 更新时间:2023-12-03 11:01:45 26 4
gpt4 key购买 nike

我从 Firebase 请求一个对象,但在请求它之前,我检查是否有 Activity 的互联网连接以获得结果,我以这种方式调用我的 repo

View 模型

class ArtistsViewModel(private val repo: IArtists):ViewModel() {


val fetchArtistsList = liveData(Dispatchers.IO){
emit(Resource.Loading())
try {
val artistList = repo.getArtists()
emit(artistList)

}catch (e:Exception){
Crashlytics.logException(e.cause)
emit(Resource.Failure(e.cause!!))
}

}
}

repo
class ArtistsRepoImpl : ArtistsRepo {

override suspend fun getArtists(): Resource<MutableList<Artist>> {
val artistList = mutableListOf<Artist>()
if(InternetCheck.isInternetWorking()){
val resultList = FirebaseFirestore.getInstance()
.collection("artists")
.get().await()
}else{
throw Exception("No internet connection")
}

return Resource.Success(artistList)
}
}

现在,当没有互联网连接时,一个异常应该返回到我的 View 模型,这是我使用 throw Exception("No internet connection") 的地方传播异常,但现在在我的 ViewModel 上,我收到了这条消息

kotlin.KotlinNullPointerException at com.presentation.viewmodel.ArtistsViewModel$fetchArtistList$1.invokeSuspend(ArtistsViewModel.kt:22) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594) at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740)



错误日志指向我的 ViewModel 中的这一行
emit(Resource.Failure(e.cause!!))

我不明白为什么它会给出 KotlinNullPointerException何时应该处理 异常(exception) 我抛出的消息。

此外,有没有更好的方法来捕获任何异常而不是 异常(exception) 在我的 ViewModel 上?

最佳答案

当您使用 !! 强制可空类型的不安全类型对话时,可能会发生 KotlinNullPointerException。运算符(operator)。这意味着对象 e.cause实际上是空的。您应该检查它是否为空,而不是盲目地假设它是非空的。

你应该做的是check the type的异常类,看看它是否对应于您在缺乏网络连接的情况下所期望的异常。

关于android - 协程异常抛出 KotlinNullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59631306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com