Después de actualizar el componente de navigation y la versión del modelo de vista del lifecycle viewmodel a 2.5.0-alpha01, tengo el siguiente problema.
java.lang.RuntimeException: no se puede iniciar la actividad ComponentInfo{com.atcc.aewp/com.atcc.aewp.activity.SplashActivity}: java.lang.UnsupportedOperationException: SavedStateViewModelFactory construido con un constructor vacío solo admite llamadas para crear (modelClass: Class, extras: CreationExtras).
Se lanza una excepción cuando se carga el modelo de vista
open class BaseActivity : AppCompatActivity() { private val appLanguageViewModel: AppLanguageViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) appLanguageViewModel.result.observe(this) { ... } } }Aquí está mi clase de modelo de vista
class AppLanguageViewModel : ViewModel() { private val languageLiveData = MutableLiveData<Event<ApplicationLanguage>>() val result: LiveData<Event<ApplicationLanguage>> = languageLiveData fun setLanguage(applicationLanguage: ApplicationLanguage) { if (LanguagePreferences.instance().setLanguage(applicationLanguage.name)) { languageLiveData.postValue(Event(applicationLanguage)) } } }Solución alterna;
private val viewModel: AppLanguageViewModel by viewModels { SavedStateViewModelFactory(application, this) }Razón;
Debido a que no todo usa la nueva API de ViewModelFactory, obtenemos este bloqueo. La fábrica predeterminada en ComponentActivity es SavedStateViewModelFactory sin ningún parámetro de constructor.
Tenemos un problema con HiltViewModelFactory. Llama al método de creación sin pasar nuevos valores de CreationExtras. Supongo que esto debería arreglarse en la empuñadura en nuestro caso. Si puede compartir el resto del seguimiento de la pila, también podríamos descubrir la causa raíz en su caso.
En nuestro caso, la solución de Sinan Kozak no funcionó. Los problemas actuales a los que nos enfrentábamos porque estábamos usando las siguientes versiones de navegación y ciclo de vida
ciclo vital
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'navegación
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0-alpha01' implementation 'androidx.navigation:navigation-ui-ktx:2.5.0-alpha01'Esto provocó que la biometría del teléfono no funcionara. Por lo tanto, la solución por nuestra parte fue volver a la versión estable anterior de las dependencias de navegación.
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1' implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'Supongo que la mejor regla general es no usar dependencias de compilación alfa en producción