IllegalArgumentException: SavedStateProvider с данным ключом уже зарегистрирован - PullRequest
1 голос
/ 10 июля 2020

Мое приложение дает сбой на устройствах некоторых пользователей, за исключением ниже.

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 не распространяется. Также на MainActivity вращение отключено. Таким образом, вращения нет.

Из приведенной ниже ошибки я понял, что каким-то образом мое действие пытается создать другую ViewModel вместо сохранения предыдущей ?. Пожалуйста, поправьте меня, если я ошибаюсь. Я не могу понять, какой сценарий ios снова запускает SavedStateRegistry.registerSavedStateProvider().

Примечание - Я пропустил методы в моем классе ViewModel и действиях для повышения читабельности.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Вы должны добавить эти зависимости в свою

реализацию 'androidx.hilt: hilt-lifecycle-viewmodel: 1.0.0-alpha02'

// Когда используя Kotlin

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

0 голосов
/ 23 июля 2020

Я столкнулся с тем же исключением, и мне удалось исправить это, перейдя в app / build.gradle файл и:

изменив имя конфигурации с ' annotationProcessor 'на' kapt 'для этих артефактов:

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

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

и syn c проект.

Вы можете найти полезное объяснение сценария, лежащего в основе увиденного по ссылке ниже: https://zsmb.co/a-deep-dive-into-extensible-state-saving/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...