Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

982
Vistas
No se puede crear una instancia de viewmodel después de usar Hilt en Android

Aquí está mi clase AllFilesListViewModel .

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

Aquí está la clase PdfItemRepository .

 @Singleton class PdfItemRepository @Inject constructor(private val pdfItemDao: PdfItemDao){ }

Para pdfItemDao . Creé un módulo llamado DatabaseModule . A continuación se muestra el código -

 @Module @InstallIn(ApplicationComponent::class) object DatabaseModule { @Provides fun provideDatabase(@ApplicationContext context: Context):AppDatabase{ return AppDatabase.getDataBase(context) } @Provides fun providePdfItemDao(database:AppDatabase):PdfItemDao{ return database.pdfItemDao() } }

Aquí está la clase de fragmento AllFilesFragment.kt donde estoy usando viewModel.

 @AndroidEntryPoint class AllFilesFragment:Fragment(){ private lateinit var binding:AllFilesFragmentBinding private val viewModel by viewModels<AllFilesListViewModel>() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = AllFilesFragmentBinding.inflate(inflater,container,false) context?: return binding.root initThings() subscribeUi() return binding.root } }

Aquí está el archivo logcat .

 06-19 19:22:20.203 23753-23753/com.emptysheet.pdfreader_autoscroll E/AndroidRuntime: FATAL EXCEPTION: main Process: com.emptysheet.pdfreader_autoscroll, PID: 23753 java.lang.RuntimeException: Cannot create an instance of class com.emptysheet.pdfreader_autoscroll.homeScreen.viewModel.AllFilesListViewModel at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221) at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278) at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:69) at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54) at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41) at com.emptysheet.pdfreader_autoscroll.homeScreen.AllFilesFragment.getViewModel(AllFilesFragment.kt) at com.emptysheet.pdfreader_autoscroll.homeScreen.AllFilesFragment.subscribeUi(AllFilesFragment.kt:72) at com.emptysheet.pdfreader_autoscroll.homeScreen.AllFilesFragment.onCreateView(AllFilesFragment.kt:64) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:442) at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947) at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818) at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:297) at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:341) at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276) at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67) at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7556) at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:860) at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107) at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8601) at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8559) at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8547) at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1641) at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587) at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134) at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851) at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404) at android.view.View.layout(View.java:15689) at android.view.ViewGroup.layout(ViewGroup.java:5048) at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527) at android.view.View.layout(View.java:15689) at android.view.ViewGroup.layout(ViewGroup.java:5048) at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148) at com.google.android.material.appbar.V
over 4 years ago · Hanz Gallego
9 Respuestas
Responde la pregunta

0

Esto se debe a una discrepancia de versión entre AndroidX Lifecycle, AndroidX Core, AndroidX Activity y AndroidX Fragment.

Hilt solo funciona si se puede anular getDefaultViewModelProviderFactory .

Esto solo es cierto si ese método realmente existe, lo que no ocurre si sus dependencias están desactualizadas. Es decir, su androidx.fragment es inferior a 1.2.0 y su actividad de androidx.activity es inferior a 1.1.0.

Usa esto y funcionará:

 implementation "androidx.appcompat:appcompat:1.1.0" implementation "androidx.fragment:fragment-ktx:1.2.5" implementation "androidx.core:core-ktx:1.3.0" implementation "androidx.activity:activity:1.1.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0"

Pero actualmente, esto es lo que hace que funcione para mí:

 implementation 'com.google.dagger:dagger:2.28' kapt 'com.google.dagger:dagger-compiler:2.28' // hilt implementation 'com.google.dagger:hilt-android:2.28-alpha' kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha' kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.28-alpha' kaptTest 'com.google.dagger:hilt-android-compiler:2.28-alpha' implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'

Junto con

 apply plugin: 'dagger.hilt.android.plugin'

Y

 classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
over 4 years ago · Hanz Gallego Denunciar

0

Esto se resolvió después de usar kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01' en build.gradle de la aplicación. Ya había agregado kapt "com.google.dagger:hilt-android-compiler:2.28-alpha" . Todavía no entendía la diferencia entre dos BTW. Si alguien sabe Por favor, explícamelo.

over 4 years ago · Hanz Gallego Denunciar

0

Enfrenté este problema antes y lo solucioné pasando SavedStateHandle al constructor principal del modelo de vista.

 class AuthViewModel @ViewModelInject constructor(@Assisted private val savedState: SavedStateHandle) : ViewModel()
over 4 years ago · Hanz Gallego Denunciar

0

Esto me sucede cuando uso Hilt, y la causa del problema fue que olvidé agregar la anotación @AndroidEntryPoint encima de la clase de fragmento. Tanto el fragmento como la actividad del anfitrión deben anotarse con esta anotación.

over 4 years ago · Hanz Gallego Denunciar

0

Para aquellos que verificaron todas las soluciones anteriores y aún no funcionan, la verificación final es eliminar la carpeta Build y rebuild el proyecto, esto obligará al compilador a volver a crear el dependency graph de la daga debajo del capó.

En mi caso, he annotated mi actividad con @AndroidEntryPoint y todavía tengo el mismo problema. Eliminé mi carpeta de build y rebuild el proyecto y funciona como se esperaba.

over 4 years ago · Hanz Gallego Denunciar

0

@ViewModelInject está obsoleto en la versión de empuñadura más nueva

Referencia

Usar HiltViewModel

 @HiltViewModel class AllFilesListViewModel @Inject constructor( val pdfItemRepository: PdfItemRepository) ) : ViewModel() { }
over 4 years ago · Hanz Gallego Denunciar

0

En alpha03, use el nuevo @HiltViewModel y el @Inject normal ahora como se muestra a continuación.

 @HiltViewModel class MyViewModel @Inject constructor( private val repository: Repository, private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some code }
over 4 years ago · Hanz Gallego Denunciar

0

También me he enfrentado a este problema hoy, probé todas las posibles soluciones sugeridas, pero fue imposible eliminar el error. Solo publico mi solución aquí en caso de que alguien tenga el mismo problema en el futuro.

En mi caso, tengo un proyecto de varios módulos, con 'módulo UI', 'módulo ViewModel' y 'módulo de casos de uso'. El error de mi parte fue que no estaba importando todos los módulos en el módulo gradle de la aplicación, solo estaba importando el módulo UI. Encontré esta nota en el sitio web de desarrolladores de Android con respecto a la implementación de la empuñadura:

Nota: Debido a que la generación de código de Hilt necesita acceso a todos los módulos de Gradle que usan Hilt, el módulo de Gradle que compila su clase de aplicación también necesita tener todos sus módulos de Hilt y clases inyectadas por el constructor en sus dependencias transitivas.

Cuando importé todos los módulos que se necesitaban para generar el gráfico DI, este bloqueo desapareció.

over 4 years ago · Hanz Gallego Denunciar

0

Cuando uso Jetpack Compose, Hilt y Compose Navigation, mi enfoque es obtener todas las dependencias en los documentos y asegurarme de que todas sus versiones estén actualizadas. La clave es cuando crea ViewModel, no debe usar = viewModel() porque tiene que usar Compose Navigation, = hiltViewModel() debe usarse en su lugar.

over 4 years ago · Hanz Gallego Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda