【发布时间】:2021-11-30 15:29:33
【问题描述】:
我正在尝试一个简单的流程,从我的活动我打开文件选择器然后到 viewmodel,这给了我以下崩溃:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
这里是造成这个崩溃的代码:
private val mainViewModel: MainViewModel by viewModels()
private var activityResultLaunch = registerForActivityResult(StartActivityForResult()) { result ->
val fileUri = result.data?.data ?: return@registerForActivityResult
val stream = contentResolver.openInputStream(fileUri) ?: return@registerForActivityResult
uploadFiles(stream)
}
private fun uploadFiles(stream: InputStream) {
lifecycleScope.launchWhenStarted {
mainViewModel.uploadFiles(
stream = stream
).asLiveData().observe(this@MainActivity, {
handleFileUploadStatus(it)
})
}
}
@HiltViewModel
class MainViewModel @Inject constructor(
private val filesRepository: FilesRepository
) : ViewModel() {
suspend fun uploadFiles(stream: InputStream): Flow<UploadStatusUI> {
return filesRepository.uploadFiles(listOf(stream))
}
}
经过一番研究,我在 Google 的问题跟踪器 here 上发现了这个问题,在 Firefox 的 github here 上发现了另一个问题,但没有任何效果。显然这个问题在生命周期 2.3.1 中得到了解决,但我仍然面临它。
这是我的版本:
“androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0”
“androidx.lifecycle:lifecycle-viewmodel-savedstate:2.4.0”
提前致谢!
编辑:崩溃堆栈跟踪here
【问题讨论】:
-
哪一行导致崩溃?你能发表超过 1 句例外吗?
-
@Pawel 我在原始帖子中添加了堆栈跟踪,但崩溃是这样的:mainViewModel.uploadFiles
标签: android kotlin android-lifecycle android-viewmodel