Я запрашиваю объект из Firebase, но перед тем, как запросить его, я проверяю, есть ли активное соединение inte rnet, чтобы получить результаты, я называю свое репо следующим образом
ViewModel
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!!))
}
}
}
Репо
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)
}
}
Теперь, когда нет соединения inte rnet, исключение должно вернуться к моей модели представления, здесь я использую throw Exception("No internet connection")
для распространения исключения но теперь в моей ViewModel я получаю это сообщение
kotlin .KotlinNullPointerException в com.presentation.viewmodel.ArtistsViewModel $ fetchArtistList $ 1.invokeSuspend (ArtistsViewModel.kt: 22) в kotlin .coroutines. jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt: 33) по адресу kotlinx.coroutines.DispatchedTask.run (Dispatched.kt: 241) по адресу kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineSchlely 59) .scheduling.CoroutineScheduler.access $ runSafely (CoroutineScheduler.kt: 60) в kotlinx.coroutines.scheduling.CoroutineScheduler $ Worker.run (CoroutineScheduler. kt: 740)
Журнал ошибок указывает на эту строку в моей ViewModel
emit(Resource.Failure(e.cause!!))
Что я не понимаю, так это почему он дает KotlinNullPointerException
, когда он должен обрабатывать Сообщение об исключении , которое я выдаю.
Кроме того, есть ли лучший способ перехватить любое исключение вместо Исключение в моей ViewModel?