DefaultDispatcher-рабочий-2 при сопрограмме учета значений

#android #android-livedata #kotlin-coroutines #coroutine

Вопрос:

Моя модель представления выглядит следующим образом:

 class BlogListActivityViewModel @ViewModelInject constructor(
private val blogRepository: BlogRepository,
private val context: Application,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher
) : AndroidViewModel(context) {

var blogDeleteLiveData = MutableLiveData<Resource<DeleteResponse>>()


fun deleteBlog(itemId: Int) {
    viewModelScope.launch(ioDispatcher) {
        blogDeleteLiveData.postValue(Resource.loading())
        try {
            val deleteResponse = async { blogRepository.deleteBlog(itemId) }
            blogDeleteLiveData.postValue(Resource.success(deleteResponse.await()))
        } catch (e: Exception) {
            blogDeleteLiveData.postValue(Resource.error(message = context.getString(R.string.unable_to_load_blog)))
        }
    }
}
}
 

Вызов активности выглядит следующим образом:

 blogListActivityViewModel.blogDeleteLiveData.observe(this, Observer { resource ->
        val sweetDialog = SweetAlertDialog(this, SweetAlertDialog.PROGRESS_TYPE)
        sweetDialog.titleText = "Deleting"
        sweetDialog.setCancelable(false)

        resource?.let { resource ->
            when (resource.status) {
                Resource.Status.SUCCESS -> {
                    blogListAdapter.deleteBlog(deletedBlog)

                    sweetDialog.changeAlertType(SweetAlertDialog.SUCCESS_TYPE)
                    sweetDialog.contentText = "Successfully deleted !!"
                    sweetDialog.titleText = "Congratulation"
                }
                Resource.Status.ERROR -> {
                    sweetDialog.changeAlertType(SweetAlertDialog.ERROR_TYPE)
                    sweetDialog.contentText = resource.message
                    sweetDialog.titleText = "Oops Something Wrong"
                }
                Resource.Status.LOADING -> {
                    deleteDialog.dismissWithAnimation()

                    sweetDialog.changeAlertType(SweetAlertDialog.PROGRESS_TYPE)
                    sweetDialog.contentText = "Please wait while deleting..."
                    sweetDialog.show()
                }
            }
        }
    })
blogListActivityViewModel.deleteBlog(blog.id)
 

Но я продолжаю получать

ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-рабочий-2

Комментарии:

1. Прежде всего, используйте CoroutineExceptionHandler , чтобы получить читаемое исключение, после этого вы сможете определить причину.

2. Опубликовать трассировку полного стека