3

我的应用程序在某些用户的设备上崩溃,但以下情况除外。

Fatal Exception: java.lang.IllegalArgumentException: SavedStateProvider with the given key is already registered
       at androidx.savedstate.SavedStateRegistry.registerSavedStateProvider(SavedStateRegistry.java:2)
       at androidx.lifecycle.SavedStateHandleController.attachToLifecycle(SavedStateHandleController.java:2)
       at androidx.lifecycle.SavedStateHandleController.create(SavedStateHandleController.java:1)
       at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:1)
       at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:5)
       at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.java:5)
       at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.java:5)
       at com.emptysheet.pdfreader_autoscroll.homeScreen.MainActivity.getViewModel(MainActivity.java:3)
       at com.emptysheet.pdfreader_autoscroll.homeScreen.MainActivity$scanDeviceForFiles$1$1.invokeSuspend(MainActivity.java:3)
       at kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull(Intrinsics.java)
       at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.java:4)
       at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.java)
       at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.java:7)

在我的设备上一切正常。我在自己的测试设备和模拟器上都没有遇到这个异常。另外,我在我的应用程序中使用 Hilt。

这是我的ViewModel课。

class MainActivityViewModel @ViewModelInject constructor(
    private val pdfItemRepository: PdfItemRepository
) : ViewModel() {
  
}

这是activity我使用它的地方ViewModel

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

      private val viewModel:MainActivityViewModel by viewModels()


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

    }

我没有MainActivityViewModel在其他任何地方使用它,除了MainActivity. 所以没有共享ViewModel。此外,旋转关闭 on MainActivity。所以没有旋转变化。

我从下面的错误中了解到,我的活动以某种方式试图创建另一个 ViewModel 而不是保留前一个?如果我错了,请纠正我。我无法理解SavedStateRegistry.registerSavedStateProvider()再次触发什么样的场景。

注意 -我在 ViewModel 类和活动中省略了方法以增加可读性。

4

2 回答 2

0

您必须将此依赖项添加到您的

实现 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'

// 使用 Kotlin 时

kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02'

于 2020-08-05T06:53:12.110 回答
0

我遇到了同样的异常并设法通过转到app/build.gradle文件来解决这个问题,并且:

将这些工件的配置名称从“ annotationProcessor ”更改为“ kapt ”:

  • ' com.google.dagger:dagger-compiler:2.28.3 ',

  • ' androidx.hilt:hilt-compiler:1.0.0-alpha01 '

并同步项目。


您可以在下面的链接中找到关于背后场景的有用解释: https ://zsmb.co/a-deep-dive-into-extensible-state-saving/

于 2020-07-23T05:02:12.940 回答